単一の Python インタープリターが使用されるように、WSGI を使用して Apache (prefork) 内で Python アプリケーションを実行しようとしています。これは、アプリケーションがスレッド同期を使用して競合状態の発生を防ぐために必要です。Apache prefork は複数のプロセスを生成するため、コードはインタープリター間で共有されず、スレッド同期は無関係になります (つまり、各スレッドは、他のプロセスに関係のない独自のロックのみを認識します)。
セットアップは次のとおりです。
- Apache 2.0 (プリフォーク)
- WSGI
- パイソン2.5
関連するApache構成は次のとおりです。
WSGIApplicationGroup %{GLOBAL}
<VirtualHost _default_:80>
WSGIScriptAlias / /var/convergedsecurity/apache/osvm.wsgi
Alias /admin_media/ /var/www/html/admin_media/
<Directory /var/www/html/admin_media>
Order deny,allow
Allow from all
</Directory>
Alias /media/ /var/www/html/media/
<Directory /var/www/html/media>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
これが私がこれまでに試したことです(どれもうまくいきませんでした):
- WSGIApplicationGroup %{GLOBAL}を追加しています
仮想ホスト内でWSGIDaemonProcessおよびWSGIProcessGroupを指定する:
WSGIDaemonProcess osvm スレッド=50
WSGIProcessGroup osvm
WSGI で単一の Python インタープリターを使用するように Apache prefork に強制する方法はありませんか? ドキュメントは、WSGIDaemonProcess および WSGIApplicationGroup オプションを使用できることを暗示しているようですが、Apache は依然としてプロセスごとに個別の Python インタープリターを作成します。