2

呼び出されたときに、外部ソースから不規則な (および未定義の) 間隔で情報を抽出する関数を作成しようとしています。このデータは、後で取得できるようにデータベースに配置されます。他のページリクエストが行われているときでも、これをバックグラウンドで実行したい. これは可能ですか?

4

2 に答える 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 に答える