我有一个多线程,多进程的代码。该操作在每5秒调用一个循环的线程(反应器LoopingCall
)内发生。 main动作函数会产生一个multiprocessing.Process
,它与zeromq库没有交互。以某种方式产生该过程会导致
ZMQError:系统调用中断
将multiprocessing.Process
更改为threading.Thread
可解决此问题。我已经看到其他人在线程/进程之间共享上下文时遇到问题,但是我不知道为什么会有这个问题。下面是显示问题的简单伪代码。
class Worker:
def action(self):
# do stuff
stuff = request_stuff_from_zmq_replier()
p = Process(target=something_totaly_zmq_free, arg= (stuff, ))
p.start()
# do other stuff
p.join()
# finish the action
def main():
w = Worker()
ctrl_loop = LoopingCall(self.w.action)
ctrl_loop.start(5).addErrback(end_gracefully)
操作系统:(泊坞窗)Ubuntu 16.04,Python 2.7