gpt4 book ai didi

python - PyZMQ PUSH 套接字不会阻塞 send()

转载 作者:行者123 更新时间:2023-12-01 05:23:58 24 4
gpt4 key购买 nike

ZMQ socket documentation 中的 ZMQ_PUSH 部分假设在没有下游节点的 PUSH 套接字上调用 send() 应该阻塞,直到至少有一个节点可用。

但是,运行以下代码似乎不会在 send() 上阻塞。此外,在我运行匹配的 PULL 套接字并接收消息之前,该进程不会退出:

import zmq
import time

zmq_context = zmq.Context()
print '> Creating a PUSH socket'
sender = zmq_context.socket(zmq.PUSH)
print '> Connecting'
sender.connect('tcp://localhost:%s' % 5555)
print '> Sending'
sender.send('message 1')
print '> Sent'

输出:

Creating a PUSH socket
Connecting
Sending
Sent

我是否遗漏了什么,或者这是 PyZmq 中的错误?

版本信息:Windows 7、Python 2.7、PyZMQ 14.0.1

编辑
经过一番摆弄后,似乎如果我将 sender.connect('tcp://localhost:5555) 替换为 sender.bind('tcp ://127.0.0.1:5555),它按预期工作。但不确定它是如何相关的。

最佳答案

您给出的示例中未满足 HWM 条件。当您打开连接时,即使在建立对等连接之前也会创建一个缓冲区。仅当该缓冲区已满时,HWM 才会被命中。例如:

import zmq

zmq_context = zmq.Context()
print '> Creating a PUSH socket'
sender = zmq_context.socket(zmq.PUSH)
sender.hwm = 1
print '> Connecting'
sender.connect('tcp://localhost:%s' % 5555)
for i in range(3):
print '> Sending', i
sender.send('message %i' % i)
print '> Sent', i

其中HWM设置为1。在这种情况下,第一条消息将被缓冲,第二次发送将阻塞,直到第一条消息真正发送完毕。

关于python - PyZMQ PUSH 套接字不会阻塞 send(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com