如何并行运行多个子进程并等待它们在Python中完成
我正在尝试将bash脚本迁移到Python bash脚本并行运行多个OS命令,然后等待它们完成后再恢复,即: 命令1& 命令2& 指挥官& 等等 命令如何并行运行多个子进程并等待它们在Python中完成,python,multiprocessing,Python,Multiprocessing,我正在尝试将bash脚本迁移到Python bash脚本并行运行多个OS命令,然后等待它们完成后再恢复,即: 命令1& 命令2& 指挥官& 等等 命令 我希望使用Python子流程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再恢复?您仍然可以使用Popen,它采用与subprocess.call相同的输入参数,但更灵活 subprocess.call:完整的函数签名与Popen构造函数的签名相同-此函数将所有提供的参数直接传递给该接口 一个区别是subproces
我希望使用Python子流程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再恢复?您仍然可以使用
Popen
,它采用与subprocess.call相同的输入参数,但更灵活
subprocess.call
:完整的函数签名与Popen构造函数的签名相同-此函数将所有提供的参数直接传递给该接口
一个区别是subprocess.call
阻塞并等待子流程完成(它构建在Popen
之上),而Popen
不会阻塞,因此允许您并行启动其他流程
请尝试以下操作:
from subprocess import Popen
commands = ['command1', 'command2']
procs = [ Popen(i) for i in commands ]
for p in procs:
p.wait()
在您的代码中,command1和command2可能同时执行?或者在command1完成后启动command2?我已经测试过了,它们并行运行。您可以将.wait()
替换为.communicate()
并将参数stdout=subprocess.PIPE
和stderr=subprocess.PIPE
添加到Popen()
如果您希望捕获子进程的stdout/sterr,而不是让它们与父进程的stdout/stderr聚集在一起,则它们会并行运行,因为子进程在Popen返回时启动。但它们在等待时阻塞()。因此,这段代码的作用是,在第一次wait()时在进程和块数组中循环一次,直到结束。如果子进程仍在运行,则在下一个wait()时阻塞。