处理器间通信,一个处理器写入,另一个读取
Posted
技术标签:
【中文标题】处理器间通信,一个处理器写入,另一个读取【英文标题】:Inter-Processor Communications, one processor writes, the other reads 【发布时间】:2014-05-12 17:22:13 【问题描述】:我将 ZeroMQ 用于 IPC。当一个进程监听一个套接字(管道还是 unix 套接字?)而另一个进程写入时,它可以完美运行。
监听的应用:
...
listener = IPCListener()
listener.startup_thread = Thread(target=listener.serve)
listener.startup_thread.daemon = True
listener.startup_thread.start()
class IPCListener()
def __init__(self)
self.context = zmq.Context.instance()
self.sock = self.context.socket(znq.REP)
self.sock.connection('ipc:///tmp/myapp')
def serve(self):
while True:
message = self.sock.recv()
response = self.handle_message(message)
self.sock.send(response)
def handle_message(self, message):
if message == 'foo':
do_something_useful()
这是经理:
context = zmq.Context.instance()
sock = context.socket(zmq.REQ)
sock.bind('ipc:///tmp/myapp')
sock.send('foo')
response = sock.recv()
print response
问题是我需要运行我的应用程序的多个工作者(进程)。不用说我得到'sock.error: [Error 98] Already in use'
我不知道有没有办法让多个进程读取一个公共套接字?可能用 zmq 是不可能的,但是有什么可以处理的呢?
【问题讨论】:
所有进程都使用相同的连接'ipc:///tmp/myapp'吗?这看起来是个问题。该文件实际上可能已创建/锁定。考虑制作文件 'ipc://tmp/myapp-%d" % os.getpid() 或因进程而异的文件,这样您就不会重复使用同一个文件。 这是有道理的,但我认为还有另一种更简单的方法 【参考方案1】:处理此问题的常用方法是让您的主进程/线程在套接字上侦听,然后一旦收到消息,将处理交给一个工作进程。
【讨论】:
嗯,我认为这是不可能的。我用 uWSGI 运行了一堆工人。以上是关于处理器间通信,一个处理器写入,另一个读取的主要内容,如果未能解决你的问题,请参考以下文章