2012-01-10 4 views
3

私はさまざまな言語を評価して、小型の高スループットアプリケーションサーバーを構築しようとしています。要求を取得したり、キャッシュアプ​​リケーション(memcached、redis)を実行している別のサーバーからデータを読み取り、5〜10行のXMLまたはJSONを返すような小さな作業が必要です。非常に高いスループット〜毎秒1000本以上の生産量。私はこれをNginxに持っています - PHPとmemcachedはブロックするいくつかのネットワークIOがあるので、すべての必要なデータを返すために5 + msかかります。Python ThreadingMixinとBaseHTTPServer

私はPythonのBaseHTTPServerクラスを見ていました。私はパイソン達人ではありませんが、シーンの背後でどのように動作するかを知る必要があります。あなたはこのページを読んでいる場合 -

http://docs.python.org/library/socketserver.html

それは「非同期ハンドラを構築ThreadingMixInとはForkingMixInクラスを使用するには。」と言います

本当に非同期ですか、またはクライアントごとに1つのスレッドを開始しますか?それがクライアントモデルごとに1つのスレッド上にある場合、これらのOSレベルのスレッドですか?私はクライアントモデルごとに1つのスレッドに固執する場合は、PythonのGCは、私はそれが高いRAM、8コアアマゾンのインスタンスを与える場合、十分に速くものをクリアします。

答えて

3

ForkingMixInソースコードでわかるように、実際のフォークはありますか? ThreadingMixInはPythonスレッドを使用します。したがって、GILに対処しなければなりません。つまり、基礎となるOSスレッド・メカニズムを使用していても、あなたのPythonスレッドを同時に処理することはありません。ハイスループットのサーバーにはお勧めできません。

したがって、短く:NOのように、それらはあなたの定義ごとに非同期ではありません。 「実際の」非同期(コア/プロセス/スレッド)機能を使用する場合は、TwistedまたはTornadoまたはおそらくGunicornを調べる必要があります。おそらく後者はあなたの非同期の定義にも合わないでしょう。

nginxでtorndadoを使用することをお勧めします。それを設定する方法については投稿in google groupsがあります。内部Tornado-Serverにはすべての標準が実装されていないため、プロキシとして「実」サーバーを使用できます。

+0

いくつかの研究をしました。あなたがこのような状況にあった場合、どのテクノロジーを使用しますか?そのNginx PHPを何かに移植する必要があります。 HTTPサーバーが組み込まれている永続的なアプリケーション。 –

+0

スタンドアロンのPyアプリケーションまたはNginxのTornado?このベンチマークは、Nginx + Tornadoが1秒あたり8000+を行ったことを示しています。 http://en.wikipedia.org/wiki/Tornado_%28web_server%29 –

+0

@Don質問:ThreadingMixinは、AFAIKというレベルのスレッドであるthreading.threadを使用しています。その場合は、GILを扱っていません。これは糸通しミキシンをOPのための理想的な選択にするでしょう。 –

関連する問題