Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何并行运行多个子进程并等待它们在Python中完成_Python_Multiprocessing - Fatal编程技术网

如何并行运行多个子进程并等待它们在Python中完成

如何并行运行多个子进程并等待它们在Python中完成,python,multiprocessing,Python,Multiprocessing,我正在尝试将bash脚本迁移到Python bash脚本并行运行多个OS命令,然后等待它们完成后再恢复,即: 命令1& 命令2& 指挥官& 等等 命令 我希望使用Python子流程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再恢复?您仍然可以使用Popen,它采用与subprocess.call相同的输入参数,但更灵活 subprocess.call:完整的函数签名与Popen构造函数的签名相同-此函数将所有提供的参数直接传递给该接口 一个区别是subproces

我正在尝试将bash脚本迁移到Python

bash脚本并行运行多个OS命令,然后等待它们完成后再恢复,即:

命令1&

命令2&

指挥官&

等等

命令


我希望使用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()时阻塞。