0

1 つの URL でのみ実行する必要がある多くの django インストールがあります。だから私は次のような構造を持っています

  1. ジャンゴのインストール 1
  2. ジャンゴのインストール 2

  3. Django インストール N

私のルートディレクトリの下。

ここで、URL「www.mysite.com/installation1」からサブパート「installation1」を取得し、os.environ['DJANGO_SETTINGS_MODULE'] を「installation.settings」に設定して、リクエストを処理させます。"www.mysite.com/installation2" というリクエストについても、同じことをしなければなりません。ただし、django はサイト オブジェクト、AppCache などを内部的にキャッシュするため、django の内部キャッシュがクリアされるように、各リクエストの前に wsgi プロセスを再起動する必要があります。(パフォーマンスが良くないことはわかっていますが、心配していません)。上記のシーンを実装するために、以下のソリューションを実装しました。

  1. httpd.conf で WSGIDaemonProcess django processes=5 スレッド=1 として
  2. django.core.handlers.wsgi で、def " call "に次の変更を加えました

    if environ['mod_wsgi.process_group'] != '':
        import signal, os
        print 'Sending the signal to kill the wsgi process'
        os.kill(os.getpid(), signal.SIGINT)
    return response
    

私の仮定は、応答が送信された後、要求ごとにデーモンプロセスが強制終了されるということです。私のプロセスは、応答が送信された後にのみ強制終了されるというこの仮定を確認したいと思います。

また、この問題を解決できる別の方法はありますか

ありがとう

編集: MaxRequestsPerChild を 1 に設定するという提案の後、httpd.conf に次の変更を加えました。

キープアライブオフ
リッスン 12021 MaxSpareThreads
1
MinSpareThreads 1
MaxRequestsPerChild 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1 ThreadsPerChild
1
WSGIDaemonProcess django プロセス=5 スレッド=1

しかし、リクエストごとにプロセスが再起動されません。プロセスが開始されると、リクエストの処理が続行されます。何か不足していますか?

4

2 に答える 2

0

これは、 http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchildに記載されているようにapacheディレクティブMaxRequestsForChild1に使用して可能になるはずです。

ただし、すべてのプロセスデーモンに対してグローバルになります。

アップデート:

または、http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelinesのようにWSGIDaemonProcessにオプションをチェックインする必要maximum-requestsあります

于 2012-09-19T08:39:52.997 に答える
0

これをしないでください。WSGIプロセスが単一のリクエストよりも長く続くのには理由があります。パフォーマンスについて心配していないと言うのですが、それでもこれを行う理由はありません。なぜあなたが必要だと思うのかわかりません-多くの人が1つのサーバーで複数のDjangoサイトを実行しており、リクエストごとにプロセスを強制終了する必要性を感じたことはありません。

代わりに、各サイトが独自のWSGIプロセスで実行されていることを確認する必要があります。これを行う方法については、mod_wsgiのドキュメントを参照してください。アプリケーショングループは、開始するのに適した場所のようです。

于 2012-09-19T08:40:57.360 に答える