Python ZeroMQ:发送前必须睡眠

Python ZeroMQ:发送前必须睡眠,python,zeromq,pyzmq,Python,Zeromq,Pyzmq,我正在使用转发器设备(使用pyzmq)编写zeromq演示 以下是代码(参考): 货代公司 import zmq context = zmq.Context() frontend = context.socket(zmq.SUB) frontend.bind('tcp://*:5559') frontend.setsockopt(zmq.SUBSCRIBE, '') backend = context.socket(zmq.PUB) backend.bind('tcp://*:5560')

我正在使用转发器设备(使用pyzmq)编写zeromq演示

以下是代码(参考):

货代公司

import zmq

context = zmq.Context()
frontend = context.socket(zmq.SUB)
frontend.bind('tcp://*:5559')
frontend.setsockopt(zmq.SUBSCRIBE, '')

backend = context.socket(zmq.PUB)
backend.bind('tcp://*:5560')

zmq.device(zmq.FORWARDER, frontend, backend)
sub.py

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5560')
socket.setsockopt(zmq.SUBSCRIBE, '')

while True:
    print socket.recv()
酒吧

import zmq, time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect('tcp://localhost:5559')
# time.sleep(0.01)
socket.send('9 hahah')
我在终端中运行
python forwarder.py
python sub.py

然后运行
python pub.py
,订阅者无法获取消息。但是,如果我在发送之前睡了一点时间(例如0.01秒),它就会工作


所以我的问题是,为什么我在发送前要睡眠?谢谢。

这就是所谓的综合征。阅读,有一些方法可以避免使用pub/sub。

具体来说,请查看以查看它的工作情况。如图所示,您将使用一对额外的REP/REQ套接字来同步您的和套接字。它还说,它显示的示例在订阅服务器中有一个不可靠的1秒延迟,然后建议您基本上需要从发布服务器向订阅服务器发送虚假数据,直到所有内容都被刷新。请看最后的“更稳健的模型”简介。所有内容都是404。