当前位置: 首页 > 知识库问答 >
问题:

Python中的ZMQ-PULL端进程能否知道PUSH端进程是否已关闭?

顾穆冉
2023-03-14

我在python中使用ZMQ通过PUSH-PULL在主应用程序和工作子进程之间分配计算。

有时,主进程可能会崩溃,而子进程仍然挂起,监听它们各自的端口。

正如此SO问题中建议的那样,我尝试使用at出在主机崩溃时关闭工作人员。但是,当我强制关闭主服务器时,at出不会捕获这种情况。

有没有办法让 PULL 端工作线程子进程注意到 PUSH 端主进程通过 zmq 袜子关闭(此处可能暗示)?

实用解决方案(编辑)

我实现的一个实用的解决方案是让master在重新启动时< code>PUSH一个消息来关闭所有挂起的workers:

在生成自己的助手之前,master的新实例向所有套接字广播退出消息。

接收到退出命令后,挂起的子进程(由master的前一个实例启动)执行sys.exit()

共有1个答案

萧修永
2023-03-14

万一鞋底PUSH-PULL

可扩展的正式通信模式仍然在现场,那么答案没有其他选择,但是:不,不能。

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

共存的< code > transport PLANE (s)< code > SIG _ PLANE (s)行为编排仅受个人想象力的限制。

虽然没有直接为你的【死人按钮】信号场景解决代码,但这个答案通过关注共存行为而不是代码来说明了这方面的可能方法。

  • 了解高级ZeroMQ套接字类型The Book-必须阅读ZeroMQ
  • 理解“ZeroMQ”下的“概念”
 类似资料:
  • 问题内容: 我的流程中有一个方法,仅当该流程不在后台时才应运行。如何动态测试当前进程是否在后台?谢谢 问题答案: 查看Unix FAQ:进程如何检测它是否在后台运行? 普遍的答案是:您无法确定您是否在后台运行。 但是您可以检查stdin是否为终端:

  • 问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是

  • 问题内容: 我有一个名为的方法的对象,该方法启动三个线程。 每个线程执行完毕后,如何获得通知? 有没有办法知道一个(或全部)线程是否已完成或仍在执行? 问题答案: 你可以通过多种方式执行此操作: 在主线程中使用以阻塞方式等待每个线程完成,或者 以轮询方式(通常不鼓励使用)检查,等待每个线程完成,或者 非常规的,对于每个有问题的线程,调用来调用对象中的方法,并对每个线程进行编程以在完成时抛出未捕获的

  • 我对插座感到困惑。据我所知,套接字是ip地址和端口号的组合。允许对流进行写入或读取(在TCP的情况下)只是编程抽象。现在我不能绝对确定的是,服务器在为客户端服务时,是有一个还是多个套接字?假设在端口80处为。 是否所有来自不同客户机的数据都被发送到一个套接字(服务器:80)和一些UBER服务器进程根据传入地址来区分它们,还是根据TCP层创建的客户机地址和端口号的组合来区分更多套接字?。有人能用一步

  • 问题内容: 如果我具有流程的PID,则os.FindProcess是否足以测试该流程的存在?我的意思是,如果返回,我是否可以认为它已终止(或被杀死)? 编辑: 我刚刚写了一个包装函数(旧式bash流程测试)。这可以正常工作,但是如果有其他解决方案(使用go库完成),我仍然很高兴。 问题答案: 这是查看进程是否处于活动状态的传统的Unix方式-向其发送0信号(就像您对bash示例所做的一样)。 来自

  • 问题内容: 在阅读了这样的问题之后,我有了一些疑问。请帮助理解。 调度涉及确定何时运行流程以及运行时间的多少。 linux内核是否调度线程或进程?由于内核中的进程和线程没有区别,调度程序如何对待它们? 如何确定每个线程的数量?一个。如果为一个进程确定了一个时间量(例如100us),是在该进程的所有线程之间共享该时间吗?或b。每个线程的数量由调度程序决定吗? 注意:问题1和问题2是相关的,可能看起来