web-dev-qa-db-ja.com

Django + Apache + mod_wsgi:wsgiスクリプトが複数回実行されるのはなぜですか?

私はすべてのサーバーテクノロジーに比較的慣れていないので、このチュートリアルに従って、mod_wsgiを使用してDjangoアプリをApacheWebサーバーにデプロイしました。

http://thecodeship.com/deployment/deploy-Django-Apache-virtualenv-and-mod_wsgi/

これが私の仮想ホストファイルです:

<VirtualHost *:80>
        ServerName www.abcxyz.org
        ServerAlias abcxyz.org
        WSGIScriptAlias / /var/www/abcxyz/Django/abcxyz/wsgi_prod.py
        Alias /static/ /var/www/abcxyz/static/
        <Location "/static/">
            Options -Indexes
        </Location>
</VirtualHost>

私が理解しているように、wsgi_prod.pyファイルは、サーバーの起動時(または、最初の要求を受け取ったとき)に一度だけ実行する必要があります。これについては特にわかりません。しかし、私のアプリケーションでは、サーバーにリクエストを送信するときに複数回実行されます。

すべてのリクエストで実行されるわけではありませんが、一部のリクエストで実行されます。また、wsgi_prod.pyの実行をたまにしかトリガーしないリクエストもあります。

これは私のwsgi_prod.pyファイルです:

import os
import sys
import site
import thread


# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('/etc/Envs/abcxyz/local/lib/python2.7/site-packages')

# Add the app's directory to the PYTHONPATH
sys.path.append('/var/www/abcxyz/Django')
sys.path.append('/var/www/abcxyz/Django/abcxyz')


os.environ['Django_SETTINGS_MODULE'] = 'abcxyz.settings.production'

# Activate your virtual env
activate_env=os.path.expanduser("/etc/Envs/abcxyz/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))


print "WSGI RUN!!!"

import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()

私の場合、何がうまくいかなかったのか、どこでエラーの検索を開始できるのか、誰かが考えていますか?

3
basilikum

プロセスごとに1回ロードされます。

マルチプロセス構成を使用している可能性があり、後続のリクエストは別のプロセスによって処理されているか、プロセスがリサイクルされています。デバッグでプロセスIDを出力します。また、読んでください:

と見てください:

4