PyZMQ 套接字在函数中创建时无法发送
PyZMQ socket's fail to send when created in function
使用 PyZMQ,当我尝试在函数内创建套接字并使用它发送消息时,我从未收到消息。
context = zmq.Context()
def sender():
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
sock.send("status good")
sender()
但是,如果我在全局范围内创建套接字,它会起作用:
context = zmq.Context()
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
sock.send("status good")
更奇怪的是,检查底层文件描述符上的事件显示事件确实发生了。但是,使用 getsockopt(EVENTS)
检查轮询值表明没有任何内容可从套接字读取。
我试过让函数在退出前休眠几秒钟,这样订阅者就有足够的时间在套接字被销毁之前阅读消息。但这并没有改变任何东西。
简单的解决方案。我忘记了使用 ZMQ 在发送数据之前必须等待连接后。一秒钟的睡眠可能就足够了,尽管在生产代码中使用的方法不是很可靠。
context = zmq.Context()
def sender():
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
time.sleep(1)
sock.send("status good")
sender()
在连接完全建立之前发送的任何消息都将被丢弃。
使用 PyZMQ,当我尝试在函数内创建套接字并使用它发送消息时,我从未收到消息。
context = zmq.Context()
def sender():
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
sock.send("status good")
sender()
但是,如果我在全局范围内创建套接字,它会起作用:
context = zmq.Context()
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
sock.send("status good")
更奇怪的是,检查底层文件描述符上的事件显示事件确实发生了。但是,使用 getsockopt(EVENTS)
检查轮询值表明没有任何内容可从套接字读取。
我试过让函数在退出前休眠几秒钟,这样订阅者就有足够的时间在套接字被销毁之前阅读消息。但这并没有改变任何东西。
简单的解决方案。我忘记了使用 ZMQ 在发送数据之前必须等待连接后。一秒钟的睡眠可能就足够了,尽管在生产代码中使用的方法不是很可靠。
context = zmq.Context()
def sender():
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
time.sleep(1)
sock.send("status good")
sender()
在连接完全建立之前发送的任何消息都将被丢弃。