ZeroMQ PULL获取队列中的所有消息

时间:2017-05-15 13:36:08

标签: zeromq pyzmq

我有一个大的(~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)。我怀疑我在缓冲或类似的事情上做错了,因为这不应该发生。

1 个答案:

答案 0 :(得分:0)

接收方的高度动态变化?

我的疑问是 PULL - 公平队列政策,在 .Context() 低级数据中硬连线 - 泵,为所有.connect()个同行服务(跟随)这个强制性的工作周期。

除非您能够以某种方式均衡喂食 PUSH 的人员发送各自消息的等待时间,否则公平排队的接收周期将完全按照您的方式进行报道,表明那些没有PUSH"及时#34;他们的下一条消息。