Python 并行运行多个进程,每次完成后继续
我在Windows环境中,假设我有两个玩具程序,分别称为Python 并行运行多个进程,每次完成后继续,python,subprocess,Python,Subprocess,我在Windows环境中,假设我有两个玩具程序,分别称为2.bat和5.bat,它们看起来像timeout 2和timeout 5 我想设置一个同时运行2.bat和5.bat的脚本,当2.bat完成时,它会再次运行,同样地,对于5.bat。我对Python很在行,但经过一点搜索,我发现我可以做到: from subprocess import Popen commands = ["2.bat", "5.bat"] while True: proc
2.bat
和5.bat
,它们看起来像timeout 2
和timeout 5
我想设置一个同时运行2.bat
和5.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
我可以通过子流程实现这一点,还是需要其他库?我的解决方案是:
从_线程导入开始_新线程
从子流程导入Popen
命令=[“2.bat”、“5.bat”]
def run_bat(文件):
尽管如此:
p=Popen(文件)
p、 等等
对于命令中的命令:
启动新线程(运行bat,(命令,))
尽管如此:
通过
你可以使用内置的\u-thread
有一个简单的函数start\u-new\u-thread()
:从\u-thread导入start\u-new\u-thread
@DanTony这有点奇怪,但我更新了我的答案,显然如果实际的程序不运行,就不可能启动线程(我猜是因为它会完成并杀死所有相关的线程)@DanTony实际上可能有一个更好的线程库threading
只是我知道这一个,所以这就是我使用的