41

ユーザーが特定のジョブを実行できるようにする小さなダッシュボードを作成しています。私はDjangoを使用しているので、リンクをクリックしてジョブを開始し、ジョブが実行されているというメッセージとともにページに戻ることができるようにしたいと考えています。ジョブの結果は、後で彼に電子メールで送信されます。

私は使用することになっていると信じていますsubprocess.Popenが、それについてはわかりません。したがって、疑似コードでは、ここで私がやりたいことは次のとおりです。

if job == 1:
    run script in background: /path/to/script.py
    return 'Job is running'
4

4 に答える 4

63
p = subprocess.Popen([sys.executable, '/path/to/script.py'], 
                                    stdout=subprocess.PIPE, 
                                    stderr=subprocess.STDOUT)

これにより、サブプロセスがバックグラウンドで開始されます。スクリプトは正常に実行され続けます。

こちらのドキュメントをお読みください。

于 2009-02-13T14:00:09.357 に答える
6

長期的なスケーリングを考えている場合は、メッセージ キューを介してこれを実行するのが間違いなく最適な方法です。バックグラウンドで常に実行されているキューにメッセージを送信し、さまざまな種類のメッセージを処理するジョブ ハンドラーを記述します。

あなたは Django を使用しているので、Beanstalkdはかなり適していると思います。これは、このテーマに関する非常に優れたチュートリアルです。その記事の最初のコメントにも、いくつかの良いヒントがあります。

個人的には、C で記述された Pythonバインディングを使用して、Erlang で記述されたカスタムのインメモリ キュー サーバーを使用しました。お役に立てれば!

于 2009-04-09T17:29:24.190 に答える
3

subprocess.Popen は確かにあなたが探しているものです。

于 2009-02-13T14:00:25.517 に答える
1

サブプロセスと親の間で大量の情報の通信を開始したい場合でも、スレッド、またはTwistedのようなRPCフレームワークを検討することをお勧めします。

しかし、おそらくそれらはあなたのアプリケーションには重すぎます。

于 2009-02-13T14:12:29.047 に答える