运行Python子进程
大家好,
我看过好几个关于如何在Python中运行子进程的讨论,但都没能解决我的问题。可能是因为我不知道怎么正确使用它们。我有几个方法想要同时运行,而不是一个接一个地执行,我以为子进程模块可以帮我实现这个。
def services():
services = [method1(),
method2(),
method3(),
mrthod4(),
method5()]
return services
def runAll():
import subprocess
for i in services():
proc = subprocess.call(i,shell=True)
不过,这种方法的问题在于,method1() 开始运行后,method2() 直到 method1() 完成才会开始。我尝试了好几种方法,包括在我的服务方法中使用 subprocess.Popen[],但都没有成功。有没有人能帮我一下,让方法1到方法5同时运行呢?
谢谢,
亚当
8 个回答
1
当你说 method1()
时,你是在调用这个函数,并且在等它返回结果。(这里说的是函数,不是方法。)
如果你只是想同时运行一堆比较复杂的函数,并收集它们的结果,你可以使用 joblib
:
from joblib import Parallel, delayed
functions = [fn1, fn2, fn3, fn4]
results = Parallel(n_jobs=4)(delayed(f)() for f in functions)
4
根据Python的文档,subprocess.call()
会等到命令执行完毕才继续往下走。你应该直接使用subprocess.Popen
这个对象,它能给你更多的灵活性。
1
在Python 3.2.x版本中,concurrent futures模块让这些事情变得非常简单。