スレッドに大きく依存している django アプリケーションを使用していますWSGIDaemonProcess
。
そこにイエス/ノーの答えが見つからず、疑問に思っています。mod_wsgi がリクエストごとに同じインタープリターを使用しているため、GIL の制限によりボトルネックが発生している可能性がありますか?
もしそうなら、この制限を回避するのに役立つ何か他のものをお勧めしますか?
スレッドに大きく依存している django アプリケーションを使用していますWSGIDaemonProcess
。
そこにイエス/ノーの答えが見つからず、疑問に思っています。mod_wsgi がリクエストごとに同じインタープリターを使用しているため、GIL の制限によりボトルネックが発生している可能性がありますか?
もしそうなら、この制限を回避するのに役立つ何か他のものをお勧めしますか?
典型的な構成では、はい、すべてのリクエストは同じサブインタープリターで処理されます。
同じプロセスの異なるサブインタープリターにいる場合でも、GIL の影響を受けます。
実際の mod_wsgi 構成を投稿して、正しく設定されていることを確認してください。
New Relic を試して、実際のボトルネックがどこにあるかを調べることを検討してください。
PyCon US 2012 でのボトルネックの発見に関する講演をご覧ください
簡潔な答え:
いいえ。
長い答え:
マルチスレッドを使用している場合でも、プロセッサ以外を有効に活用するこの機能は、Apache が単一のプロセスだけでなく複数のプロセスを使用してリクエストを処理するという事実によってさらに強化されます。したがって、特定のプロセス内で GIL の競合が発生した場合でも、GIL はプロセスに対してローカルであり、プロセス間で拡張されないため、他のプロセスの実行が停止することはありません。
引用: https://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
パフォーマンスを改善する方法を推奨するのに十分な情報を提供していませんが、Python でスレッドを多用するプログラムを実際に作成したことがある場合は、それが最初の間違いです。プログラムを CPython で実行する代わりに、代わりに Jython または IronPython を試してみてください。しかし、それは mod_wsgi では機能しないため、何をしようとしているのかを理解するには、もっと詳細が必要です...