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

在Windows 7/10中如何让Python等待多并行进程执行完成?

嘿,我帮你梳理几个在Windows 7/10环境下实现并行运行Python脚本并等待全部完成的靠谱方案,解决你之前用start /w导致串行执行的问题:

方法1:用Python的subprocess模块(首推)

这是最灵活可控的方式,完全在你的调度脚本内部处理,不需要依赖CMD的复杂语法,还能轻松扩展到30个进程。

核心思路是用subprocess.Popen启动每个脚本(不会阻塞主进程),然后等待所有子进程执行完毕后,再运行后续操作的脚本。

示例代码:

import subprocess
import sys

def launch_script(script_path):
    # 启动目标Python脚本,返回进程对象
    return subprocess.Popen([sys.executable, script_path], shell=False)

if __name__ == "__main__":
    # 定义要并行运行的脚本列表(后续扩展到30个直接加在这里就行)
    parallel_scripts = ["node1.py", "node2.py", "node3.py"]
    
    # 批量启动所有脚本,保存进程对象
    running_processes = [launch_script(script) for script in parallel_scripts]
    
    # 等待每个进程执行完成
    for proc in running_processes:
        proc.wait()
    
    # 所有并行脚本结束后,执行后续操作
    print("所有节点脚本执行完毕,开始运行后续处理脚本")
    subprocess.run([sys.executable, "printstatement.py"], check=True)
  • 用sys.executable能确保调用的是当前Python环境的解释器,避免环境混乱
  • proc.wait()会阻塞主进程直到对应子进程完成,遍历所有进程就能实现等待全部结束
  • 如果需要捕获脚本的输出或处理错误,可以把wait()换成communicate(),或者检查proc.returncode

方法2:改进CMD/PowerShell命令写法

如果你更倾向于用系统命令的方式调用,之前的&和&&组合逻辑不对(&&只在前面命令成功时才执行后续,但start是非阻塞的,会直接返回成功),可以改用PowerShell来实现等待多个进程:

import os

# 用PowerShell命令批量启动进程并等待全部完成
os.system('''powershell -Command "$procs = @(); 
$procs += Start-Process python -ArgumentList 'node1.py' -PassThru; 
$procs += Start-Process python -ArgumentList 'node2.py' -PassThru; 
$procs += Start-Process python -ArgumentList 'node3.py' -PassThru; 
$procs | Wait-Process; 
Start-Process python -ArgumentList 'printstatement.py' -Wait"''')
  • Start-Process -PassThru会返回进程对象,收集到数组后用Wait-Process等待全部结束
  • 最后启动printstatement.py时加-Wait确保它执行完才退出

方法3:用Python的multiprocessing模块管理进程

如果你的节点脚本可以改成可调用的函数,也可以用multiprocessing来并行执行,本质是通过多进程调用subprocess启动脚本:

from multiprocessing import Process
import subprocess
import sys

def run_script(script_path):
    subprocess.run([sys.executable, script_path], check=True)

if __name__ == "__main__":
    parallel_scripts = ["node1.py", "node2.py", "node3.py"]
    processes = []
    
    # 逐个创建并启动进程
    for script in parallel_scripts:
        p = Process(target=run_script, args=(script,))
        p.start()
        processes.append(p)
    
    # 等待所有进程完成
    for p in processes:
        p.join()
    
    # 执行后续操作
    subprocess.run([sys.executable, "printstatement.py"], check=True)

总结

个人最推荐方法1,因为全程在Python内处理,逻辑清晰,扩展和维护都方便,后续要加到30个脚本只需要修改parallel_scripts列表即可,不需要调整核心逻辑。

内容的提问来源于stack exchange,提问作者Dror Bogin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:58