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

Python循环中启动子进程时如何不等待其执行完成继续循环?

解决方法

你的问题出在subprocess.Popen之后调用了communicate()方法——这个方法会阻塞当前循环,直到子进程完全执行完毕才会继续。而你的test.py是无限循环运行的,所以第一个进程永远不会结束,循环也就卡在了第一次迭代。

修改后的主程序代码

import subprocess

if __name__ == '__main__':
    someList = ['a', 'b', 'c']
    # 可选:保存进程实例,方便后续管理(比如终止进程)
    running_processes = []

    for index in someList:
        # 推荐用列表形式传命令,避免shell=True的安全风险
        cmd_args = ['python', 'test.py', index]
        print(' '.join(cmd_args))
        # 启动子进程,不阻塞当前循环
        proc = subprocess.Popen(cmd_args)
        running_processes.append(proc)

    # 如果你后续需要主动终止所有子进程,可以用这段代码
    # for proc in running_processes:
    #     proc.terminate()

关键修改点

  • 移除stdout, stderr = pipe.communicate():删掉这个阻塞调用,循环就能立即启动下一个子进程,无需等待前一个结束。
  • 替换字符串命令为列表参数:用['python', 'test.py', index]代替'python test.py ' + index,同时去掉shell=True,既避免了shell注入的安全问题,也能更可靠地处理参数中的特殊字符。
  • (可选)保存进程实例:把每个Popen对象存入列表,方便后续对这些后台进程进行管理,比如批量终止。

test.py的代码不需要修改,它会保持无限运行的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:30:51