【问题标题】:zmq round robin lost message PUSH/PULLzmq 循环丢失消息 PUSH/PULL
【发布时间】:2017-01-16 22:34:33
【问题描述】:

我尝试从一个客户端向两个工作人员发送 10 条消息。我使用推/拉模式。我在 2 日丢失了一条消息。

python push.py 
message n°0
message n°1
message n°2
message n°3
message n°4
message n°5
message n°6
message n°7
message n°8
message n°9

工人 1:

python pull.py
Received message n°1
Received message n°4
Received message n°7

工人 2:

python pull.py
Received message n°0
Received message n°3
Received message n°6
Received message n°9

我使用 python 3,这是我的代码:

push.py

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://127.0.0.1:5557")

time.sleep(1)
for i in range(10):
    message = "message n°%d" % i
    print(message)
    socket.send_string(message)
    time.sleep(1)
time.sleep(1)

拉.py

import zmq

context = zmq.Context()

socket = context.socket(zmq.PULL)
socket.connect("tcp://127.0.0.1:5557")

while True:
    print("Received %s" % socket.recv_string())

也许我的插座上丢失了选项。有什么帮助吗?

【问题讨论】:

  • 我注意到消息推送太快时出现奇怪的消息丢失。尝试增加消息之间的超时。此外,请确保首先启动 2 个拉动工人。这有什么改变吗?编辑:就我而言,我使用的是 pub/sub。
  • pub sub 按预期工作,我没有丢失任何消息。仅使用 PUSH/PULL 时出现此错误

标签: python zeromq pyzmq


【解决方案1】:

您的代码在我看来是正确的。我复制/粘贴了它,但无法重现该问题。我在 OSX 上尝试了 python 2.7.13 和 3.6.0。使用 pyzmq 版本 4.1.2。

您启动流程的顺序是什么? (没关系。)每次运行都会丢失消息 2 吗?

如果您可以重现它,那么您可能需要尝试使用网络嗅探器来查看发生了什么。

【讨论】:

  • 我在 Ubuntu 16.04 LTS 上,使用 python 3.5.2。我开始我的工人,然后是我的服务器。有 4 名工人,我失去了 3 号和 8 号(0 1 2 x 4 5 6 7 x 9)。有 3 名工人,我失去了 3 号和 7 号(0 1 2 x 4 5 6 x 8 9 )。有 2 个工人,我失去了 2、5 和 8 号(0 1 x 3 4 x 6 7 x 9)。有 1 名工人,我得到了所有数字(0 1 2 x 4 5 6 x 8 9 )。我会用wireshark进行tcp转储
  • 我刚刚在 Ubuntu 14.04.5 LTS、python 3.4.3、pyzmq 4.0.4 上尝试过,我也无法在那里重现该问题。这很奇怪——如果你弄清楚了,请告诉我。
猜你喜欢
  • 2011-07-03
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
相关资源
最近更新 更多