2017-01-15 9 views
0

1つのクライアントから2人のワーカーに10個のメッセージを送信しようとしています。 PUSH/PULLパターンを使用します。zmq round robin lost messageプッシュ/プル

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

労働者2:私は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°0 
Received message n°3 
Received message n°6 
Received message n°9 

私は、Python 3を使用し、ここに私のコードです。 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) 

pull.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()) 

は、たぶん私は私のソケットのオプションを失いました。どんな助け?

+0

メッセージをあまりにも速くプッシュすると、私は奇妙なメッセージの損失に気付きました。メッセージ間のタイムアウトを増やしてみてください。また、最初に2人のプルワーカーを開始するようにしてください。それは何か変わるのだろうか?編集:私の場合、私はパブ/サブを使用していた。 – ventsyv

+0

pub subは期待どおりに機能し、メッセージは失われません。 PUSH/PULLでこのエラーが発生しました –

答えて

0

あなたのコードは私に似ています。私はそれをコピー/ペーストし、問題を再現できませんでした。私はOSX上でPython 2.7.13と3.6.0を試しました。 pyzmqバージョン4.1.2を使用しています。

どのような順序でプロセスを開始していますか? (それは問題ではありません。)あなたは毎回メッセージ2を失いますか?

これを再現できる場合は、ネットワークスニファを試して、何が起こっているのかを確認する必要があります。

+0

私は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 dumpを実行しようとしています –

+0

私はUbuntu 14.04.5 LTS、python 3.4.3、pyzmq 4.0.4で試したところ、問題を再現できませんでした。それは非常に奇妙です - plsはあなたがそれを把握すれば私に知らせる。 – colini