2016-09-05 1 views
0

私のアプリはepollを使用してリクエストを待つtcpサーバです。
同じループ内のキューを待つ必要があります。ある
wake up the thread either socket r/w is available or queue is not empty.Python待機キューとソケットをシングルスレッドで実装

は、私は確かに多くのことをグーグルが、どれも良い解決策が見つかりました。私はそれを回避するには、いくつかの方法について考えました

  1. はepoll.waitのタイムアウト(e.g.0.5)を設定した後、空になるまでqueue.get_nowait。 このようにすれば、何も処理しなくてもCPUリソースが無駄になります。 それはリアルタイムではありません。

  2. は、epollが両方を待つことができるように、キューではなくドメインソケットを使用します。 このように、送信者は、pythonオブジェクトを文字列/バイナリデータに変換して、 転送(および受信者の逆)に退屈させなければなりません。

---いずれも私を満たしていません。

epollがイベントを待つことができるのだろうか? - 私はevent.set()の後にqueue.put()することができます。 または

問題を解決する良い方法はありますか?

感謝!

答えて

0

ノンブロッキングソケットを調べる必要があるようです。

https://docs.python.org/2/howto/sockets.html#non-blocking-sockets

+0

それがノンブロッキング.... epoll.waitすでにだ()ブロックが、ソケットがしませんでしょう。 - あなたが 'epoll non-blocking'を意味するならば、デッドループとハイCPUを引き起こすでしょう –

関連する問題