【发布时间】:2016-01-31 11:20:34
【问题描述】:
我在 python 中使用ZMQ 在主应用程序和worker 子进程之间分配计算,通过PUSH-PULL。
有时,主进程可能会崩溃,而子进程仍然挂起,监听各自的端口。
按照this SO question 中的建议,我尝试使用atexit 在master 崩溃的情况下关闭worker。但是atexit 在我强行关闭主服务器时没有捕捉到这种情况。
PULL-side worker 子进程是否有办法注意到 PUSH-side master 通过 zmq sock (可能暗示here)?
实用解决方案(编辑)
我实施的一个实用解决方案是让主 PUSH 发送消息以关闭所有待处理的工作人员重新启动时:
在生成自己的助手之前,新的主实例向所有套接字广播exit 消息。
收到退出命令后,挂起的子进程(由前一个主实例启动)执行sys.exit()。
【问题讨论】:
标签: python subprocess zeromq distributed-computing pyzmq