3

Apache に wsgi アプリケーションをデプロイし、次のように構成しました: WSGIDaemonProcess wsgi-pcapi user= group= processes=2 threads=15

Apache を再起動した後、スレッドの数を数えています: ps -efL | グレップ | grep -c httpd

ローカル Apache は 1 つの wsgi アプリしか実行していませんが、返される数は 36 で、その理由がわかりません。2 つのプロセスと 15 のスレッドがあることはわかっています。つまり、15*2+2=32 では、なぜさらに 4 つあるのでしょうか?

4

1 に答える 1

2

mod_wsgi デーモン プロセスごとに 3 つ余分にあるのはなぜですか。

この構成では、リクエストを処理するために 15 個の新しいスレッドが作成されます。プロセス内の他の 3 つの原因は次のとおりです。

  1. プロセスが開始されたメインスレッド。プロセスをシャットダウンするための適切なシグナルが受信されるまで待機します。
  2. 特定のイベントの発生をチェックし、プロセスをシャットダウンするように通知する監視スレッド。
  3. Python インタープリターでデッドロックが発生したかどうかを確認するデッドロック スレッド。発生した場合は、スレッド (2) が検出するイベントが送信されます。スレッド (2) は、終了するようにプロセスにシグナルを送信します。そのシグナルはスレッド (1) によって検出され、スレッド (1) は正常にプロセスを終了し、適切にクリーンアップを試みます。

したがって、余分なスレッドは、発生する可能性のあるさまざまな事象に対してシステム全体が非常に堅牢であることを保証するためのものです。さらに、プロセスがシャットダウンされているときに、Python サブインタープリターが適切に破棄され、atexit に登録された Python コードを実行して独自のクリーンアップを実行できるようにします。

于 2013-05-10T11:04:18.273 に答える