PyZMQ套接字在函数中创建时无法发送

时间:2015-08-18 19:13:31

标签: python sockets events pyzmq

使用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)检查轮询值表示没有任何内容可以从套接字中读取。

我已经尝试在退出之前使函数休眠几秒钟,因此订阅者有足够的时间在套接字被销毁之前读取消息。但这并没有改变任何事情。

1 个答案:

答案 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()

在连接完全建立之前发送的任何消息都将被删除。