分别运行2个或更多的子进程调用

2024-04-25 15:21:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同的可执行文件(run1run2)。我想同时运行它们。它们共享一个只读输入文件,但在其他情况下,它们是不同的进程。 是否可以同时调用call? 目前,正如我所编码的,cmd2的调用等待cmd1的调用完成。在

with open(dosout, "w") as dout, open(jijout, "w") as jout:
    cmd1 = ["mpirun", "-np", "8", "~/WORK/run1", dosinp]
    cmd2 = ["mpirun", "-np", "8", "~/WORK/run2", jijinp]
    call(cmd1, stdout=dout)
    call(cmd2, stdout=jout)
dout.close()
jout.close()

是否可以使用call?或者Popen来自this的答案是唯一(或更好)的出路?在


Tags: 可执行文件closeasnpstdoutopencallwork
2条回答

要同时运行两个子流程:

from subprocess import Popen

# start processes
with open(dosout, "wb", 0) as dout, open(jijout, "wb", 0) as jout:
    processes = [Popen(["mpirun", "-np", "8", "...WORK/run1", cmd], stdout=file)
                 for cmd, file in [(dosinp, dout), (jijinp, jout)]]

# wait for them to finish
statuses = [p.wait() for p in processes]

注意:文件在退出with-语句时关闭,不要手动调用.close()。在

您将需要使用Popen,如您链接的答案中所述(以及其他许多地方,因为{}是一个稍微低一层的接口,通常需要使用)。在

相关问题 更多 >