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

如何同时执行多个brew及pip包安装命令(替代逐行执行)

如何让多条安装命令同时运行

嘿,我来帮你搞定这个并行执行命令的需求~原来的os.system是阻塞式的,执行完一条才会走下一条,要让它们同时跑,我们可以用Python的subprocess模块或者线程池来实现,下面给你几种实用的方案:

方案1:用subprocess.Popen启动后台进程

这是最直接的方式,Popen会立即返回进程对象,不会等待命令执行完毕,所有命令会同时启动:

import subprocess

cmds = ['brew install ghostscript', 'brew install imagemagick', 'brew install libmagic', 'pip install sphinx']
processes = []

# 逐个启动所有命令的后台进程
for cmd in cmds:
    proc = subprocess.Popen(cmd, shell=True)
    processes.append(proc)

# 等待所有进程执行完成再继续后续代码
for proc in processes:
    proc.wait()

方案2:用线程池管理并行执行

如果需要更精细的控制(比如捕获输出、处理执行异常),可以用concurrent.futures.ThreadPoolExecutor:

import subprocess
from concurrent.futures import ThreadPoolExecutor

def run_single_command(cmd):
    # check=True会在命令执行失败时抛出异常,方便排查问题
    # capture_output=True可以捕获命令的输出内容
    subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True)

cmds = ['brew install ghostscript', 'brew install imagemagick', 'brew install libmagic', 'pip install sphinx']

# 创建线程池,同时执行所有命令
with ThreadPoolExecutor(max_workers=len(cmds)) as executor:
    executor.map(run_single_command, cmds)

注意:避免brew命令的冲突问题

这里要提醒你:brew本身在执行安装操作时会加全局锁,同时运行多个brew命令大概率会互相阻塞(因为brew同一时间只能处理一个安装任务)。所以更高效的做法是把三个brew命令合并成一条,再和pip命令并行:

import subprocess

# 合并brew命令,减少冲突概率
cmds = ['brew install ghostscript imagemagick libmagic', 'pip install sphinx']
processes = [subprocess.Popen(cmd, shell=True) for cmd in cmds]

for proc in processes:
    proc.wait()

这样既实现了并行,又不会触发brew的锁冲突问题,效率更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:49:51