2009-10-24 12 views
14

Djangoのビューから完了するまでに数時間かかるプロセスを実行する必要があります。私は国家を知る必要はなく、国家とコミュニケートする必要はありませんが、プロセスを開始した直後にリダイレクトする必要があります。Djangoビューから長期実行プロセスを開始するには?

私はsubprocess.Popenを使って、新しいthreading.Threadmultiprocessing.Processの中で使ってみました。ただし、親プロセスは子プロセスが終了するまでハングアップし続けます。 がほぼになる唯一の方法はフォークを使用しています。明らかに、親が終了するまではゾンビプロセスを残すので、それは良くありません。

私はフォークを使用するときに何をしようとしているのです。だから、

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

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

+2

重複:http://stackoverflow.com/search?q=%5Bpython%5D+long-running。 http://stackoverflow.com/questions/1107826/python-long-running-daemon-job-processor、http://stackoverflow.com/questions/805120/python-task-server –

答えて

10

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

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

5

まず最初に、shanyuと言うように、あなたの仕事のためにcronを使ってみてください。

あなたに合っていない場合は、CeleryProjectを使用して、DjangoのタスクQueueにしてみてください。作業のためにはRabbitMQを使用します。そして、ここには、先物を簡単に使用するための少しoverviewがあります。

関連する問題