2016-06-14 99 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