ZeroMQ清理PULL插座 - 半关闭

时间:2012-09-10 17:55:37

标签: python zeromq

我的问题是尝试半关闭zmq套接字。

简单来说,我在Python中有一对PUSH / PULL套接字 PUSH套接字永远不会停止发送,但PULL套接字应该能够以下列方式自我清理:

  1. 停止接受任何其他消息到队列
  2. 处理仍在队列中的消息
  3. 关闭套接字等。
  4. 我不想以任何方式影响PUSH套接字,它可以继续累积自己的队列,直到另一个PULL套接字出现或可能已存在。 LINGER选项似乎不适用于recv()(只需使用send())。

    一个选项可能是在代理PUSH和接收方PULL HWM设置为零之间存在代理。然后经纪人的PULL将累积消息。但是,我宁愿不这样做。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

我相信你会混淆哪种套接字类型会对邮件进行排队。根据{{​​3}}文档,PUSH套接字将对其消息进行排队,但PULL套接字没有任何类型的排队机制。

所以你要求做的就是以下内容:

1)停止 recv'ing PULL套接字的任何其他消息。 2)关闭插座等。

PUSH套接字将继续自动“排队”其消息,直到满足HWM(然后它将阻塞并且不再排队任何消息)或者PULL套接字出现并开始重新发送消息。

我认为你真正关心的是一个缓慢的PULL阅读器。您希望在PUSH套接字中获取所有当前排队的消息(一次?)然后退出。这不是zmq的工作方式,一次只能收到一条消息。

要实现此类操作,您必须使用自己的队列包装PULL功能。您是否“不断”将消息拉入您的个人队列(在另一个线程中?),直到您想要停止,然后处理这些消息并退出。