【问题标题】:ZMQ in Python - Can the PULL-side process know if the PUSH-side process was closed?Python中的ZMQ - PULL端进程能否知道PUSH端进程是否关闭?
【发布时间】: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


    【解决方案1】:

    答:没有,但有解决方法

    万一唯一PUSH-PULL

    S可扩展F普通C通讯Pattern留在现场,则答案没有其他选项但是:不,不能


    但 ZeroMQ 是向分布式处理概念的强大思维转变

    但是,随着一些轻微的架构变化,所需的功能来自其他正式通信模式,与最初的 PUSH-PULL 单独部署并排部署。

    TransportPLANE(s) + SIG_PLANE(s) 并存的行为编排只受个人想象力的限制。


    虽然没有直接解决您的[dead-man button] 信号场景的代码this answer illustrates the possible approaches in this direction by focusing on co-existing BEHAVIOUR(s) rather than on code.

    【讨论】:

    • 听起来不错,工作起来像魔鬼——是的,ZeroMQnanomsg 都是非常好的框架,我喜欢与它们一起工作。也尽情享受吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多