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

如何在Python中多核心并行运行两个脚本(Windows环境)

在Windows下将Python脚本绑定到指定CPU核心并行运行

你现在用的exec循环方式是串行执行的——两个脚本会在同一个进程里依次运行,既没法利用多核心,更做不到指定核心运行。要实现需求,得用多进程+CPU亲和性绑定的方案,以下是两种可行方法:

方法一:用psutil库(简单易实现)

先安装依赖:

pip install psutil

主脚本代码:

import multiprocessing
import psutil
import os

def run_script(script_path, core_id):
    # 绑定当前进程到指定CPU核心(Windows核心编号从0开始)
    current_process = psutil.Process(os.getpid())
    current_process.cpu_affinity([core_id])
    # 执行目标脚本
    with open(script_path, 'r') as f:
        exec(f.read())

if __name__ == '__main__':
    # 替换为你的脚本路径
    script_paths = [
        r"C:\Users\USER\1\A.py",
        r"C:\Users\USER\2\A.py"
    ]
    # 绑定到核心0和核心1(对应物理核心1和2)
    cores = [0, 1]
    
    # 创建并启动进程
    processes = []
    for path, core in zip(script_paths, cores):
        p = multiprocessing.Process(target=run_script, args=(path, core))
        p.start()
        processes.append(p)
    
    # 等待所有进程完成
    for p in processes:
        p.join()

方法二:用Windows原生API(无需第三方库)

如果不想安装额外依赖,可以直接调用Windows的kernel32 API设置CPU亲和性:

import multiprocessing
import os
import ctypes

# 调用Windows内核API
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

def set_cpu_affinity(core_id):
    # 生成CPU掩码:仅允许指定核心运行
    cpu_mask = 1 << core_id
    # 获取当前进程句柄
    process_handle = kernel32.GetCurrentProcess()
    # 设置亲和性
    if not kernel32.SetProcessAffinityMask(process_handle, cpu_mask):
        raise ctypes.WinError(ctypes.get_last_error())

def run_script(script_path, core_id):
    set_cpu_affinity(core_id)
    with open(script_path, 'r') as f:
        exec(f.read())

if __name__ == '__main__':
    script_paths = [
        r"C:\Users\USER\1\A.py",
        r"C:\Users\USER\2\A.py"
    ]
    cores = [0, 1]
    
    processes = []
    for path, core in zip(script_paths, cores):
        p = multiprocessing.Process(target=run_script, args=(path, core))
        p.start()
        processes.append(p)
    
    for p in processes:
        p.join()

关键注意事项

  • 核心编号规则:Windows的CPU核心编号从0开始,比如物理核心1对应编号0,物理核心2对应编号1。如果你的CPU有超线程,逻辑核心编号会更多,可通过psutil.cpu_count(logical=False)查看物理核心数,psutil.cpu_count(logical=True)查看逻辑核心数。
  • 输出交错:两个子进程的输出会直接打印到主控制台,可能出现内容交错的情况(这是多进程并行的正常现象),如果需要有序输出,可以给输出操作加进程锁。
  • 进程独立性:每个子进程拥有独立的内存空间,脚本A.py中的全局变量不会在进程间共享,若需要数据交互,得用multiprocessing的队列、管道等机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:50:28