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

如何在Python中同步执行外部命令?

问题原因
  • subprocess.Popen 是异步启动子进程的接口,调用后会立即回到主程序继续执行后续代码,不会主动等待子进程运行结束
  • 你当前的代码仅启动了两个子进程,没有添加等待子进程终止的逻辑,所以会立刻计算耗时,完全达不到预期的运行时长
修复方案

如果需要两个子进程并行运行,总耗时取最长子进程的运行时长(约5秒),调用每个Popen实例的wait()方法等待所有子进程结束即可:

import subprocess
import time

start_time = time.time()

p1 = subprocess.Popen(['timeout', "2"], shell=False,
                     stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)

p2 = subprocess.Popen(['timeout', "5"], shell=False,
                     stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)

# 新增等待逻辑:等待两个子进程全部运行结束
p1.wait()
p2.wait()

print(f"Finished in {time.time() - start_time} Seconds")

如果需要两个子进程串行运行,总耗时达到7秒,调整执行顺序即可:

import subprocess
import time

start_time = time.time()

p1 = subprocess.Popen(['timeout', "2"], shell=False,
                     stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
p1.wait() # 先等第一个进程执行完成

p2 = subprocess.Popen(['timeout', "5"], shell=False,
                     stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
p2.wait() # 再等第二个进程执行完成

print(f"Finished in {time.time() - start_time} Seconds")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:18:03