2012-04-20 12 views
2

pyzmqコネクタでzeromqを使用するpythonスクリプトがあります。スクリプトは本当に基本的なものです。ZMQ_REPソケットを使用してメッセージを受信し、それに何か小さなものを送って返信します。無限ループのすべてです。マルチスレッドやその他のものはありません。Zeromqを使用するPythonスクリプトはメッセージの受信を停止します

問題は約15時間後にサーバーでサービスを実行しても応答が停止し、実行中でポートが依然としてバインドされている場合です。だから私はZMQ_REQソケットでそのスクリプトにメッセージを送るとき、私は答えを得ません。スクリプトを再起動すると、使用されなかったすべてのメッセージがzmqキューから取得されるため、pyzmqコネクタまたはPythonまたはzmqソケット構成に問題があると思われます。

2つの異なる国の2つのサーバー、1つはArchLinux、2つ目のCentOS、そして私のローカルマシンでこのスクリプトを試しましたが、動作は同じです。また、私はちょうど文字列メッセージを受信し、それを戻し、それを動作させ、問題なく再起動せずに問題なくメッセージを返す基本的なPythonソケットを使用するPythonスクリプトを実行しようとしました。だから問題は確かにどこかのzmq/pyzmqにある。

+0

ZMQ_REQとZMQ_REPの両方のスクリプトは、同じマシン上にあるか、ネットワークに分散していますか?あなたは通信のために基本的な 'socket.send()'と 'socket.recv()'関数を使用していますか、またはポーラーを使用していますか? ZMQ_REPスクリプトのロギングを試してみましたか? –

+1

いくつかコードを投稿できますか?プロセスが終了する前にメモリ使用量が増加していますか?どのバージョンのzmqとpythonを使用していますか?私はPythonの長いスクリプトを実行する前に問題に直面していました。単純な解決策は、N個の要求を処理した後にプロセスを再起動することでした(gunicornがどのように作業者のメモリリークを処理するか)。 – tapan

答えて

1

メッセージの送信頻度はどのくらいですか?信頼性の高い接続を維持するために、ハートビートを実装する必要があります。このガイドに記載されている "Paranoid Pirate"のパターンはうまくいきます。

関連する問題