由于计算机资源的原因,我试图运行多个exe(其中12个),在性能下降之前,我一次最多可以生成4个。
我正在尝试查找是否有一次一次调用4个exe的方法,一旦其中一个完成,就调用另一个exe来填充释放的资源
我当前的代码可以做到这一点:
excs = [r"path\to\exe\exe.exe",r"path\to\exe\exe.exe",r"path\to\exe\exe.exe",r"path\to\exe\exe.exe"]
running = [subprocess.Popen(ex) for ex in excs]
[process.wait() for process in running]
它将重复此过程3次,以便全部运行12个。不幸的是,这意味着它需要等待所有这些完成之后才能继续进行下一个设置。有更有效的方法吗?
为了记录,所有exe的运行时间都不同。
答案 0 :(得分:0)
Python有ThreadPoolExecutor,这非常方便
import subprocess
from concurrent.futures import ThreadPoolExecutor
def create_pool(N,commands):
pool = ThreadPoolExecutor(max_workers=N)
for command in commands:
pool.submit(subprocess.call, command)
pool.shutdown(wait=False)
def main():
N_WORKERS=4
commands = [job1, job2, ...]
create_pool(N_WORKERS, commands)