并行运行多个进程,每个进程完成后继续

时间:2021-04-13 17:34:22

标签: python subprocess

我在 Windows 环境中,假设我有两个玩具程序,分别称为 2.bat5.bat,它们分别看起来像 timeout 2timeout 5

我想设置一个同时运行 2.bat5.bat 的脚本,当 2.bat 完成时,它会再次运行,对于 5.bat 也是如此。我不擅长 Python,但经过一番搜索后,我发现我可以做到:

from subprocess import Popen

commands = ["2.bat", "5.bat"]
while True:
    procs = [Popen(i) for i in commands]  
    for p in procs:
       p.wait()

这不是我想要的:它等待两个进程完成,然后再次执行这两个进程。我想要做的(用伪代码)如下:

while True:
    in parallel, run 2.bat and 5.bat
    when 2.bat finishes, rerun 2.bat again
    when 5.bat finishes, rerun 5.bat again

我可以使用 subprocess 实现这一点,还是需要其他库?

1 个答案:

答案 0 :(得分:1)

我的解决方案是:

from _thread import start_new_thread
from subprocess import Popen


commands = ["2.bat", "5.bat"]


def run_bat(file):
    while True:
        p = Popen(file)
        p.wait()


for command in commands:
    start_new_thread(run_bat, (command, ))

while True:
    pass