2016-06-14 95 views
0

我有一個Python程序,可以進行一些機器學習。這應該可以通過使用HTTP的網絡訪問。因爲我希望Apache充當服務器,所以我使用python腳本將收到的數據發送到我的程序,使用python multiprocessing.connection碼頭和主機系統之間的進程間通信

對於如腳本發送將

#!/usr/bin/python 

from multiprocessing.connection import Client 
import cgi 
from job import * 

form = cgi.FieldStorage() 
address = ('localhost', 6000) 
conn = Client(address, authkey='secretpass') 
conn.send(form) 

和接收腳本將

from multiprocessing.connection import Listener 
import threading 

print "Starting listener" 
address = ('localhost', 6000) 
listener = Listener(address, authkey='secretpass') 
while True: 
    conn = listener.accept() 
    msg = conn.recv() 
    conn.close() 
    # Do stuff with msg 
listener.close() 

一旦我觸發網址,Apache將調用第一個腳本,它會發送蟒蛇反對其他腳本。其他腳本將收到它並執行處理。

現在,我想將ML部分放入Docker容器中,而Apache將位於主機系統中。在那種情況下,我將如何溝通?

+0

補充說明,以澄清 我的問題是:我可以使用多通信泊塢窗內運行的進程間通信容器和主機系統中的另一個進程? – Hari

回答

0

作爲Processing庫的一部分,您可以找到進程隊列。這種結構的存在允許消息在進程之間傳遞。如果您正在使用Linux,那麼需要設置一個全局變量並推送消息。該模式通常是:任何進程都可以發佈,並且單個進程可以讀取。通過兩個或更多隊列,您可以輕鬆設置來回通信,而無需擔心碰撞或丟失的消息。

在Windows和其他更具限制性的系統中,這變得更加困難,因爲在進程之間沒有共享全局變量,並且無法在創建進程時傳遞複雜的結構。在Windows中,簡單地堅持線程要容易得多。多處理的

詳情/ Python中的線程可以在這裏找到:

16.6. multiprocessing — Process-based 「threading」 interface

+0

我的問題是:我可以使用多處理通信在Docker容器內運行的進程與主機系統中的另一個進程之間進行通信嗎? – Hari

+0

同樣,如果您在Linux或Mac上運行,答案很簡單:創建一個處理隊列作爲全局變量,任何進程都應該能夠訪問它來發布或讀取。無論在哪種情況下,這聽起來像是你在這裏有一些非常特殊和不尋常的東西,你最好的選擇是自己模擬一個原型。 – codingCat

+0

將嘗試並回復...謝謝 – Hari