私のアプリはepollを使用してリクエストを待つtcpサーバです。
同じループ内のキューを待つ必要があります。ある
:wake up the thread either socket r/w is available or queue is not empty.
Python待機キューとソケットをシングルスレッドで実装
は、私は確かに多くのことをグーグルが、どれも良い解決策が見つかりました。私はそれを回避するには、いくつかの方法について考えました
:
はepoll.waitのタイムアウト(e.g.0.5)を設定した後、空になるまでqueue.get_nowait。 このようにすれば、何も処理しなくてもCPUリソースが無駄になります。 それはリアルタイムではありません。
は、epollが両方を待つことができるように、キューではなくドメインソケットを使用します。 このように、送信者は、pythonオブジェクトを文字列/バイナリデータに変換して、 転送(および受信者の逆)に退屈させなければなりません。
---いずれも私を満たしていません。
epollがイベントを待つことができるのだろうか? - 私はevent.set()の後にqueue.put()することができます。 または
問題を解決する良い方法はありますか?
感謝!
それがノンブロッキング.... epoll.waitすでにだ()ブロックが、ソケットがしませんでしょう。 - あなたが 'epoll non-blocking'を意味するならば、デッドループとハイCPUを引き起こすでしょう –