You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环中启动多个subprocess.Popen进程后等待所有进程完成?

如何在循环中启动多个subprocess.Popen进程后等待所有进程完成?

其实你想到的思路完全没问题,这也是处理这类并行进程等待场景的常规操作,一点都不“不优雅”哦~

具体做法很直接:

  • 首先在循环里把每个启动的subprocess.Popen对象都存到一个列表里
  • 等所有进程都启动完毕后,再遍历这个列表,逐个等待进程结束

代码示例如下:

import subprocess

processes = []
for filename in filenames:
    proc = subprocess.Popen(
        f"snt_sim -yaml {filename}", shell=True, stdout=subprocess.DEVNULL
    )
    processes.append(proc)

# 等待所有进程完成
for proc in processes:
    proc.wait()

这里用wait()就足够了,因为你已经把stdout重定向到了DEVNULL,不需要获取进程的输出内容。如果之后需要处理stdout或者stderr,再用communicate()就行,它会等待进程结束并返回输出结果。

这种方式的优势在于所有进程都是并行启动的,不会在循环里逐个阻塞,完全符合你“先全部启动,再统一等待”的需求。

要是你想尝试更高级的写法,也可以用concurrent.futures模块配合subprocess.run()来实现,但对于这种简单场景来说,存Popen对象到列表再逐个等待的方式已经足够简洁高效了。

备注:内容来源于stack exchange,提问作者Kiffikiffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:33:05