2

私は django プロジェクトを書いています。特定のタスクを実行する並列スレッドが必要です。

プロジェクトは、mod_wsgi を使用して Apache2.2 にデプロイされます。

実際、私の実装は、 django.wsgiファイルから呼び出されるwhile True - Sleepを持つスレッドで構成されています。

この実装は正しいですか?

2 つの問題が発生します: django.wsgi は 1 回だけ呼び出されますか? スレッドのそのインスタンスだけを実行しますか? 次に、スレッドを実行するには、少なくとも 1 つのページに「手動で」アクセスする必要があります。回避策はありますか?

より良い解決策についてのヒントはありますか?

前もって感謝します。

4

2 に答える 2

3

スレッドの作成をトリガーするように要求する必要がある場合の回避策の要求に関しては、2つのオプションがあります。1つは、WSGIImportScriptディレクティブを使用して、起動時にWSGIスクリプトファイルをプリロードすることです。2つ目は、WSGIScriptAliasのプロセスグループオプションとアプリケーショングループオプションを使用して同じことを実現することです。

2番目の方法が推奨されます。また、WSGIスクリプトファイルが変更された場合にプロセス全体が再ロードされるように、デーモンモードを使用していることを確認する必要があります。埋め込みモードを使用し、WSGIスクリプトファイルを変更した場合は、スクリプトだけが再ロードされ、2番目のバックグラウンドスレッドが作成されます。

したがって、デーモンモードの場合は次のように使用します。

WSGIDaemonProcess mysite
WSGIScriptAlias / /some/path/django.wsgi process-group=mysite application-group=%{GLOBAL}

プロセスグループとアプリケーショングループのオプションが両方ともWSGIScriptAliasに明示的に提供されるという副作用は、要求が到着する前にプロセスの開始時にWSGIスクリプトファイルをプリロードするという副作用があります。

これを実現するためにWSGIScriptAliasにオプションを提供する後者の機能を使用するには、mod_wsgi3.0以降を使用している必要があることに注意してください。


更新1

Windowsを使用していて、デーモンモードにアクセスできない場合:

WSGIImportScript /some/path/django.wsgi application-group=%{GLOBAL}
WSGIScriptAlias / /some/path/django.wsgi application-group=%{GLOBAL}

デーモンモードが使用できない場合にWSGIScriptAliasのアプリケーショングループのみを設定すると、プリロードが発生するというmod_wsgiの省略のようです。

于 2010-05-31T23:10:29.663 に答える
2

スレッドで実行するためにこれが必要なのはなぜですか? 個別の長時間実行プロセスが必要な場合は、コマンド ラインまたはデーモンから作成します。または、セロリのようなものを使用してください。

于 2010-05-31T17:18:26.780 に答える