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

如何在Jenkins中让Python脚本的subprocess命令并行执行?

问题分析与解决方案

你的代码本身存在逻辑问题,导致两条命令在任何环境下都不会真正并行执行——你在启动两个进程后立刻调用了p.wait(),这会阻塞主线程直到command1对应的进程执行完毕,之后才会处理command2的输出。本地运行时可能因为进程执行速度快,给你造成了并行的错觉,而Jenkins的执行环境调度更严格,所以串行的表现更明显。

要实现真正的并行执行,修改代码如下:

import os
import subprocess

reg_path = os.environ['PWD']
# 推荐用列表形式定义命令,避免shell=True的安全风险和兼容性问题
command1 = ['python3', python_script_path, reg_path]
command2 = ['python3', python_script_path, reg_path]

# 先启动两个进程,不立即等待
proc1 = subprocess.Popen(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 等待两个进程完成并获取输出,此时两个进程会并行执行
out1, err1 = proc1.communicate()
out2, err2 = proc2.communicate()

# 进程执行完毕后不需要手动kill,communicate()会等待进程结束
errMsg = 'other processes are running'
assert errMsg in str(out1) or errMsg in str(out2)

关键修改点:

  • 移除了p.wait()调用:communicate()方法会自动等待进程执行完成并捕获输出,无需提前阻塞等待单个进程
  • 改用命令列表替代字符串拼接+shell=True:避免shell解析带来的安全问题,同时提升跨环境兼容性
  • 调整执行顺序:先启动所有并行进程,再统一获取结果,确保两个进程同时运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:55:25