【问题标题】:PyZMQ socket's fail to send when created in functionPyZMQ 套接字在函数中创建时发送失败
【发布时间】:2015-08-18 19:13:31
【问题描述】:

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

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

【问题讨论】:

    标签: python sockets events pyzmq


    【解决方案1】:

    简单的解决方案。我忘记了使用 ZMQ 您必须在连接后等待才能发送数据。一秒钟的睡眠可能就足够了,尽管在生产代码中使用这种方法并不可靠。

    context = zmq.Context()
    
    def sender():                                          
        sock = context.socket(zmq.PUB)
        sock.connect("tcp://localhost:44444")
        time.sleep(1)
        sock.send("status good")
    
    sender()
    

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

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 2013-12-21
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多