docker和主机系统之间的进程间通信

时间:2016-06-14 13:26:26

标签: python apache multiprocessing

我有一个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()

一旦我触发了url,Apache就会调用第一个脚本,它会将python对象发送到其他脚本。其他脚本将接收它并进行处理。

现在,我想将ML部分放入docker容器,而Apache将在主机系统中。在那种情况下,我将如何沟通?

1 个答案:

答案 0 :(得分:0)

作为Processing库的一部分,您将找到进程Queue。存在此结构以允许在进程之间传递消息。如果您正在使用Linux,则需要设置全局变量并推送消息。模式通常是:任何进程都可以发布,并且单个进程可以读取。使用两个或多个队列,您可以轻松设置来回通信,而无需担心冲突或丢失消息。

在Windows和其他限制性更强的系统中,这变得更加困难,因为进程之间没有共享的全局变量,也无法在创建进程时传递复杂的结构。在Windows中,简单地坚持使用线程要容易得多。

python中的多处理/线程的详细信息可以在这里找到:

16.6. multiprocessing — Process-based “threading” interface