2

背景:Pythonで約120の異なるソケット接続からデータを受信する現在の実装があります。私の現在の実装では、これらの個別のソケット接続のそれぞれを、それぞれ専用のスレッドで処理します。これらの各スレッドはデータを解析し、最終的には共有のロックされた辞書に保存します。これらのソケットのデータレートは均一ではなく、一部のソケットは他のソケットよりも多くのデータを取得します。

質問:これはPythonで受信データを処理するための最良の方法ですか、それともPythonにはスレッドごとに複数のソケットを処理するためのより良い方法がありますか?

4

3 に答える 3

3

非同期アプローチを使用すると、より快適になります。よく知られたアプリケーションとしてこれをうまく実装した例として、Tornadoは完璧です。Tornado の ioloop は、Web サーバー以外にも簡単に使用できます。

geventなどの代替ライブラリがあります。しかし、Tornado は、ループとその上に実装された Web サーバーの両方を提供し、ループをうまく使用する方法の優れた例であるため、最初に見るのに適した場所だと思います。

于 2012-07-02T03:23:29.643 に答える
2

スレッドを使用している場合は、基本的にはそれを行う方法です。

別の方法は、 TwistedTornadoGEventなど、さまざまな非同期ネットワーク ライブラリのいずれかを使用することです。

于 2012-07-02T03:23:51.047 に答える
1

Asynchronous UDP Socket Readingの質問で述べたように、 asyncoroを使用して多くの非同期ソケットを効率的に処理できます。問題における asyncoro のもう 1 つの利点は、共有辞書のロックについて心配する必要がないことです。asyncoro では、いつでも最大 1 つのコルーチンが実行され、強制的なプリエンプションがないためです。

于 2012-07-12T00:42:34.127 に答える