排队多个子进程

Queue-ing multiple subprocesses

我需要一些帮助来控制子流程。 我真的不确定我还需要 do/research 哪个方向的代码。

目前,我正在使用 python 控制软件的 运行ning,如下面的代码所示。

import subprocess

# Declaring some input and output names for the third-party program
label = ['fname1', 'fname2', 'fname3', 'fname4']
input_list = [ 'inp.'+ l for l in label ]
output_list = [ 'out.'+ l for l in label ]

# Run all sets of input and output using the third-party software
for in, out in zip(input_list, output_list):
    #The bash command to run the executable
    command = f"mpirun pw.x < {in} > {out}" 
    subprocess.run(command, shell=True)

我的电脑有 64 个逻辑内核,正如我用软件测试的那样,使用 32 和 64 不会改变计算速度,因此,我想编辑代码以适应两个并发 subprocess.run 与 mpirun -n 32 ....

我不知道如何做并发的事情,比如排队和控制在给定时间允许 运行 子进程的实例数量。

请问哪个 module/library 可以帮我完成这件事?当然,我们将不胜感激。

P.S. PBS/SLURM systems are not an option because I am also doing some processing stuff within the python script.

谢谢!

如果你想 运行 mpirun -n 32 并行两次,试试这个:

import concurrent.futures

labels = ['fname1', 'fname2']
with concurrent.futures.ProcessPoolExecutor(max_workers=len(labels)) as pool:
    for label in labels:
        command = f"mpirun -n 32 pw.x < inp.{label} > out.{label}"
        pool.submit(subprocess.run, command, shell=True)

with 语句将在最后关闭池,使其等待所有作业完成。