如何在python中启动子进程而不是等待它返回

时间:2012-06-26 08:08:31

标签: python django r subprocess

我正在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('')

希望我只是忽略了一些简单的事情 谢谢。

2 个答案:

答案 0 :(得分: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

您必须注意,即使主进程停止,子进程也会运行。

答案 1 :(得分:0)

您可以使用subprocess.call()的包装器,该包装器将拥有自己的线程,在该线程中它将调用subprocess.call()方法。