私の問題は、zmqソケットを半分閉じようとするようなものです。
簡単に言えば、PythonにはPUSH/PULLソケットのペアがあります。
PUSHソケットは送信を停止しませんが、PULLソケットは次の方法でそれ自体をクリーンアップできる必要があります。
- キューへの追加メッセージの受け入れを停止します
- キューに残っているメッセージを処理する
- ソケットなどを閉じます。
PUSHソケットに影響を与えたくはありません。別のPULLソケットが発生するか、すでに存在する可能性があるまで、独自のキューを蓄積し続けることができます。LINGERオプションはrecv()では機能しないようです(send()でのみ)。
1つのオプションは、ブローカーPUSHとレシーバーPULLHWMをゼロに設定してブローカーを間に置くことです。次に、ブローカーのPULLがメッセージを蓄積します。しかし、私はむしろこれをしたくありません。他に方法はありますか?