我使用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不可能,但是可以解决这个问题呢?
答案 0 :(得分:0)
处理此问题的常用方法是让主进程/线程侦听套接字,然后在收到消息后,将处理交给其中一个工作进程。