运行Python子进程

1 投票
8 回答
2253 浏览
提问于 2025-04-16 20:23

大家好,

我看过好几个关于如何在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模块让这些事情变得非常简单。

撰写回答