使用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)
检查轮询值表示没有任何内容可以从套接字中读取。
我已经尝试在退出之前使函数休眠几秒钟,因此订阅者有足够的时间在套接字被销毁之前读取消息。但这并没有改变任何事情。
答案 0 :(得分:0)
简单的解决方案。我忘记了使用ZMQ,你必须在连接之后再等待发送数据。一秒睡眠可能就足够了,但在生产代码中使用的方法并不健全。
context = zmq.Context()
def sender():
sock = context.socket(zmq.PUB)
sock.connect("tcp://localhost:44444")
time.sleep(1)
sock.send("status good")
sender()
在连接完全建立之前发送的任何消息都将被删除。