我有一个大的(~100)个PUSH“客户端”,它们定期(~1 / s)向PULL“服务器”发送消息。服务器以每秒约2批次的速率批量处理消息。批量大小不固定 - 理想情况下,我希望在每次迭代时处理队列中的所有消息。我获取队列中所有消息的代码如下:
buffer = []
while True:
try:
buffer.append(socket.recv_pyobj(zmq.NOBLOCK))
except zmq.ZMQError as e:
break
print(len(buffer))
这似乎有效,但缓冲长度在迭代之间变化很大。通常情况下,我希望每次都能看到大约50条消息。但是,我经常会看到许多迭代,其中包含< 10条消息,然后是一条非常大的消息(~1000)。我怀疑我在缓冲或类似的事情上做错了,因为这不应该发生。
答案 0 :(得分:0)
我的疑问是 PULL
- 公平队列政策,在 .Context()
低级数据中硬连线 - 泵,为所有.connect()
个同行服务(跟随)这个强制性的工作周期。
除非您能够以某种方式均衡喂食 PUSH
的人员发送各自消息的等待时间,否则公平排队的接收周期将完全按照您的方式进行报道,表明那些没有PUSH
"及时#34;他们的下一条消息。