3

R で書かれた大規模なプログラムと連携するサイトを django で構築しています。R プログラムを実行するボタンをサイトに配置したいと考えています。を使用して動作subprocess.call()していますが、予想どおり、サーバーはsubprocess.call()戻るまでビューのレンダリングを続行しません。このプログラムの実行には数時間かかる可能性があるため、これは実際にはオプションではありません。
R プログラムを実行し、Python コードを実行し続ける方法はありますか? 私は周りを検索して調べましたがsubprocess.Popen()、それを機能させることができませんでした。
ビューで使用している一般的なコードは次のとおりです。

if 'button' in request.POST:
    subprocess.call('R CMD BATCH /path/to/script.R', shell=True)
    return HttpResponseRedirect('')

うまくいけば、単純なものを見落としただけです。
ありがとうございました。

4

2 に答える 2

6
subprocess.Popen(['R', 'CMD', 'BATCH', '/path/to/script.R'])

プロセスは非同期で開始されます。

例:

$ cat 1.py
import time
import subprocess

print time.time()
subprocess.Popen(['sleep', '1000'])
print time.time()

$ python 1.py
1340698384.08
1340698384.08

メインプロセスが停止した後でも、子プロセスが実行されることに注意する必要があります。

于 2012-06-26T08:11:38.300 に答える
0

subprocess.call() にラッパーを使用できます。そのラッパーには、subprocess.call() メソッドを呼び出す独自のスレッドがあります。

于 2012-06-26T08:11:57.660 に答える