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

如何让调用多Python脚本的单核心Python程序利用全部12个CPU核心

如何让调用多Python脚本的单核心Python程序利用全部12个CPU核心

嗨,看你的代码现在是串行挨个跑这些脚本,确实浪费了12核的性能!别担心,用Python自带的multiprocessing模块就能轻松把这些脚本并行起来,榨干所有核心的潜力。给你两种实用的方案,按需选择:

方案一:用进程池自动管理(简单省心)

这种方式适合脚本数量不多、不需要太精细控制的场景,进程池会自动帮你分配任务到各个核心:

import multiprocessing
import time

# 先把执行单个脚本的逻辑封装成函数,方便进程调用
def run_single_script(script_path):
    exec(open(script_path).read())

if __name__ == '__main__':
    mp_cores = multiprocessing.cpu_count()
    print(f"This PC has {mp_cores} cores. Now utilizing all of them!")

    # 把要执行的脚本路径都列在这里
    target_scripts = [
        "xxxx.py",
        "xxxxx.py",
        "xxxxxx.py",
        "xxxxxxx.py"
    ]

    tic = time.perf_counter()

    # 创建进程池,大小设为CPU核心数(12)
    with multiprocessing.Pool(processes=mp_cores) as pool:
        # 并行执行所有脚本
        pool.map(run_single_script, target_scripts)

    toc = time.perf_counter()
    print(f"TOTAL RUN TIME: {toc - tic:0.2f} seconds")

为啥这么写?

  • with块会自动帮你处理进程池的创建和销毁,不用手动关闭;
  • pool.map()会把脚本列表里的每个路径,分配给进程池里的空闲进程去执行,12核会同时开工(你只有4个脚本的话,会用4个核心,剩下的核心也会待命,要是以后加脚本就能自动用上)。

方案二:手动创建进程(灵活可控)

如果以后你需要给不同脚本传不同参数、单独监控某个进程的状态,手动创建Process实例会更灵活:

import multiprocessing
import time

def run_single_script(script_path):
    exec(open(script_path).read())

if __name__ == '__main__':
    mp_cores = multiprocessing.cpu_count()
    print(f"This PC has {mp_cores} cores. Now utilizing all of them!")

    target_scripts = [
        "xxxx.py",
        "xxxxx.py",
        "xxxxxx.py",
        "xxxxxxx.py"
    ]

    tic = time.perf_counter()

    # 先创建所有进程实例
    process_list = []
    for script in target_scripts:
        proc = multiprocessing.Process(target=run_single_script, args=(script,))
        process_list.append(proc)
        proc.start()  # 启动当前进程

    # 等待所有进程都执行完再继续
    for proc in process_list:
        proc.join()

    toc = time.perf_counter()
    print(f"TOTAL RUN TIME: {toc - tic:0.2f} seconds")

一些重要提醒

  • 资源冲突要避免:如果这些脚本会同时写同一个文件、访问同一个数据库连接,一定要用multiprocessing.Lock加锁,不然会出现数据乱码或者读写错误;
  • Windows用户必看:必须把多进程的代码放在if __name__ == '__main__':里面!因为Windows的进程启动机制会重新导入脚本,不加这个会无限创建进程,直接崩掉;
  • 进程间数据传递:如果主进程和子脚本需要传递数据,别直接用全局变量(每个进程有独立内存空间),可以用multiprocessing.Queue或者Pipe来实现通信。

备注:内容来源于stack exchange,提问作者Yusuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:53:14