10

Python でソケットの学習を始めたばかりです。そこで、チャット サーバーとクライアントの例をいくつか書きました。私がインターネットで見たもののほとんどは、サーバーへのクライアント接続の (非同期) 処理にスレッド化モジュールを使用しているようです。何千ものスレッドがサーバーを殺す可能性があるため、スケーラブルなサーバーの場合、いくつかの追加のトリックを使用する必要があることは理解しています(間違っている場合は修正してください。しかし、それはGILが原因ですか?)が、現時点ではそれは私の関心事ではありません.

奇妙なことに、Python ドキュメントのどこかで、サブプロセスを作成するのが正しい方法であることがわかりました (残念ながら参照を失ってしまいました。申し訳ありません :( ) ソケットの処理について。

問題は、スレッドまたはマルチプロセッシングを使用することです。それとももっと良い解決策がありますか?

答えを教えてください、私に違いを説明してください。

ところで、よく書かれた Twisted のようなものがあることは知っています。既製のスケーラブルなサーバーを探しているわけではありません。代わりに、スケーリングできる、または少なくとも 10k クライアントを処理するサーバーを作成する方法を理解しようとしています。

編集:オペレーティング システムは Linux です。

4

2 に答える 2

11

Facebookはスケーラブルなサーバーを必要としていたため、Tornado(非同期を使用)を作成しました。 Twistedも有名なスケーラブルです(非同期も使用します)。 Gunicornはトップパフォーマーでもあります(複数のプロセスを使用します)。私が知っている高速でスケーラブルなツールはどれもスレッドを使用していません。

さまざまなアプローチを試す簡単な方法は、標準ライブラリ( http://docs.python.org/library/socketserver.html)のSocketServerモジュールから始めることです。ThreadingMixinまたはForkingMixinのいずれかから交互に継承することで、アプローチを簡単に切り替えることができます。

また、非同期アプローチについて学習することに興味がある場合、理解を深める最も簡単な方法は、Tornadoの実装について説明しているブログ投稿を読むことです:http: //golubenco.org/2009/09/19/understanding-the -code-inside-tornado-the-asynchronous-web-server-powering-friendfeed /

幸運と幸せなコンピューティング:-)

于 2011-10-21T09:29:58.193 に答える
0

数千のスレッドがサーバーを強制終了する可能性があります (間違っていれば訂正してください。しかし、それは GIL が原因ですか?)

一つには、GIL は no とは何の関係もありません。スレッドの。これらのスレッド内で IO を実行している場合、GIL やその他の問題なしに、数十万のこれらのスレッドを持つことができます。

CPU を集中的に使用するタスクがある場合、GIL が機能します。

GIL の詳細については、David Beazly による非常に有益な講演をご覧ください。

于 2012-09-26T12:08:21.750 に答える