0

受信する特別な HTTP 要求を処理するために、Apache2 で Python スレッド プールを実行しています。

アイデアは、リクエスト ソースごとに 1 つの「ハンドラー」スレッドがあるということです。したがって、これらの特別なリクエストを送信する 3 つのデバイス (A、B、C) がある場合、それぞれがサーバー上に独自の「ハンドラー」スレッドを持つことになります (1- A、2-B、3-C)

次のように定義されたスレッドプールクラスがあります。

class threadController(threading.Thread)
   threadPool = []

そして、新しいリクエストを受け取ると、実行中のすべてのスレッドを調べて、特定のスレッドを突き合わせ、それにリクエストを渡します。

これは、Windows で十分に機能するように見えました。

ただし、Linux では、threadPool 変数が空として返されることがあり、余分なスレッドが取得されます。したがって、リクエストを送信する単一のデバイス (A) がありますが、最終的には 2 つのスレッド (1-A と 2-A) になります。

奇妙なことに、これは常に1 つの余分なスレッドであり、それ以上になることはありません。私のデバイス (A) が 5 つのリクエストを送信するか、30 のリクエストを送信するかに関係なく。

django の統合に mod_wsgi (3.3) を使用しています。

注: これは、セッションを処理するためのやや非正統的な方法であることを認識しています。セッションをより適切に処理する方法を探しているわけではありません-より良い方法があることはすでに知っています:)

4

1 に答える 1

1

Windows では、リクエストを処理する Apache 子プロセスは 1 つだけです。Windows 以外のシステムでは、組み込みモードを使用している場合、複数のプロセスが存在する可能性があります。

mod_wsgi デーモンとそのデフォルトの単一プロセスを使用します。見る:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process

と:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

于 2012-06-17T23:18:18.950 に答える