3

我正在 django 中构建一个与用 R 编写的大型程序交互的站点,并且我希望在运行 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 回答