gpt4 book ai didi

python - ZeroMQ 清理 PULL 套接字 - 半关闭

转载 作者:行者123 更新时间:2023-11-28 19:26:03 30 4
gpt4 key购买 nike

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

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

  1. 停止接受队列中的任何其他消息
  2. 处理仍在队列中的消息
  3. 关闭 socket 等

我不想以任何方式影响 PUSH 套接字,它可以继续累积自己的队列,直到另一个 PULL 套接字出现或可能已经存在。 LINGER 选项似乎不适用于 recv()(仅适用于 send())。

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

最佳答案

我相信您对哪种套接字类型将对消息进行排队感到困惑。根据zmq_socket文档,PUSH 套接字将其消息排队,但 PULL 套接字没有任何类型的排队机制。

所以您要求能够执行以下操作:

1) 停止接收PULL 套接字 的任何其他消息。2)关闭socket等

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

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

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

关于python - ZeroMQ 清理 PULL 套接字 - 半关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357017/

30 4 0
文章推荐: python - 尝试从 C 调用 Python
文章推荐: python - 如何从