呼び出されたときに、外部ソースから不規則な (および未定義の) 間隔で情報を抽出する関数を作成しようとしています。このデータは、後で取得できるようにデータベースに配置されます。他のページリクエストが行われているときでも、これをバックグラウンドで実行したい. これは可能ですか?
1033 次
2 に答える
1
要求/応答サイクルの外で Django 関数を実行する最良の方法は、カスタム管理コマンドとして実装することです。これは、 を使用して定期的に実行するように設定できますcron
。
すでに使用している場合は、 を使用したcelery
定期的なタスクをサポートしていますが、これにはcelerybeat
デーモンを構成して実行するcelerybeat
必要があり、頭痛の種になる可能性があります。Celery は、質問のタイトルで説明されているように、長時間実行されるタスク (ビューで開始されたものの、独自の時間で完了するもの) もサポートしています。
于 2012-08-23T16:10:15.813 に答える
0
ページがロードされたときに関数を呼び出す必要があるように見えるので、ビュー内に次のように配置できます。
def my_view(request):
#Call the long running function
long_running_function()
#Do view logic and return
return HttpResponse(...)
を処理するには、外部データ ソース ロジックを実装する をlong_running_function
使用celery
および作成できます。tasks.py
タスクの作成、キューへの追加、および設定については、こちらcelery
にまとめられています
それを試すためのより簡単なソリューションが必要な場合は、subprocessモジュールを見てください。
ここで非常によく似た答えDjango: start a process in a background thread?
于 2012-08-23T18:38:50.470 に答える