16

Django ビューから完了するまでに数時間かかるプロセスを実行する必要があります。状態を知ったり、状態と通信したりする必要はありませんが、プロセスを開始した直後にそのビューをリダイレクトする必要があります。

を使用してみましsubprocess.Popenたが、 new 内で使用してthreading.Threadmultiprocessing.Process. ただし、親プロセスは、子が終了するまでハングし続けます。それをほぼ完成させる唯一の方法は、フォークを使用することです。親プロセスが終了するまでゾンビ プロセスを残すため、これは明らかに良くありません。

それが、フォークを使用するときに私がやろうとしていることです:

if os.fork() == 0:
    subprocess.Popen(["/usr/bin/python", script_path, "-v"])
else:
    return HttpResponseRedirect(reverse('view_to_redirect'))

では、死傷者を最小限に抑えて Django ビューから完全に独立したプロセスを実行する方法はありますか? それとも私は何か間違ったことをしていますか?

4

4 に答える 4

10

これがあなたのケースに適しているかどうかはわかりませんが、私がしていることは次のとおりです。タスクキューを使用します(djangoモデルを介して)。ビューが呼び出されると、タスクに新しいレコードが入力され、問題なくリダイレ​​クトされます。タスクは、django とは別に定期的に cron によって実行されます。

編集: cron は、関連する (およびカスタム) django コマンドを呼び出して、タスクを実行します。

于 2009-10-24T22:57:01.877 に答える
2

kronos.pyのコードを見て、この問題の1つの解決策を確認してください。

http://www.razorvine.net/download/kronos.py

于 2009-10-25T10:48:26.697 に答える
2

http://code.google.com/p/django-command-extensions/wiki/JobsScheduling

このタスクを達成するために使用できる優れたライブラリです。

于 2009-10-25T00:29:16.897 に答える