zeromq: 無限待機を防ぐには?
2023-10-17 04:26:41
質問
私はZMQを始めたばかりです。私は、ワークフローがあるアプリを設計しています。
- 多数のクライアント (ランダムな PULL アドレスを持つ) の 1 つが 5555 でサーバーに要求を PUSH します。
- サーバはクライアントの PUSH を永遠に待ち続けます。1 つが来ると、ワーカープロセスはその特定のリクエストのために生成されます。そう、ワーカー プロセスは同時に存在することができるのです。
- そのプロセスがタスクを完了すると、その結果をクライアントに PUSH します。
PUSH/PULLアーキテクチャが向いているのではと思うのですが。お願い をお願いします。 をお願いします。
しかし、これらのシナリオをどのように処理すればよいのでしょうか。
- client_receiver.recv() は、サーバーが応答しない場合、無限に待ちます。
- は、クライアントはリクエストを送るかもしれませんが、直後に失敗します。そのため、ワーカープロセスは永遠に server_sender.send() で止まったままになります。
のようなものをどのようにセットアップすればよいのでしょうか? タイムアウト のようなものをPUSH/PULLモデルで設定するのでしょうか?
EDIT : user938949 さんのご指摘のおかげで、私は になりました。 を得たので、後学のためにそれを共有します。
どのように解決するのですか?
zeromq >= 3.0を使用している場合、RCVTIMEOソケットオプションを設定することができます。
client_receiver.RCVTIMEO = 1000 # in milliseconds
しかし、一般的にはポーラーを使用することができます。
poller = zmq.Poller()
poller.register(client_receiver, zmq.POLLIN) # POLLIN for recv, POLLOUT for send
そして
poller.poll()
はタイムアウトを取ります。
evts = poller.poll(1000) # wait *up to* one second for a message to arrive.
evts
は、受信するものがなければ空リストとなります。
でポーリングすることができます。
zmq.POLLOUT
で、送信に成功するかどうかを確認することができます。
あるいは、失敗したかもしれないピアのケースを処理するために、a:
worker.send(msg, zmq.NOBLOCK)
で十分かもしれません。これは常にすぐに返され、送信が完了しなかった場合は ZMQError(zmq.EAGAIN) を送出します。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] if 節の終了方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?