如何在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
相关产品推荐
相关产品推荐

