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

Python多进程迁移Linux后仅占单核心,求全CPU利用率实现方案

多进程CPU利用率问题:Windows vs Linux 差异解决

问题定位

核心问题是Linux系统中Python进程未绑定到独立核心,默认调度策略会让进程在多核心间游走,无法持续占满单个核心;同时需排查业务函数func是否存在IO阻塞或GIL限制。

解决方案

1. 强制进程绑定到指定核心(CPU亲和性)

Linux下通过psutil设置进程的CPU亲和性,让每个子进程固定在一个核心运行:

首先修改业务函数func,添加核心绑定逻辑(需传入当前worker的编号):

import os
import psutil

def func(config_path, _data, worker_id):
    # 将当前进程绑定到对应编号的核心(核心编号从0开始)
    proc = psutil.Process(os.getpid())
    proc.cpu_affinity([worker_id])
    
    # 你的原有业务逻辑...

然后调整主进程的参数组装和调用:

from multiprocessing import Pool

max_worker = 16  # 匹配16核CPU
count = len(data) // max_worker
args = []
for worker in range(max_worker):
    if worker == max_worker - 1:
        _data = data.iloc[worker * count:]
    else:
        _data = data.iloc[worker * count: worker * count + count]
    args.append((config_path, _data, worker))  # 加入worker_id参数

with Pool(processes=max_worker) as pool:
    results = pool.starmap(func, args)

2. 排查业务逻辑中的性能瓶颈

  • 检查func是否包含IO操作(文件读写、网络请求等):这类操作会让进程进入阻塞状态,CPU利用率骤降。如果有IO,建议将IO与CPU密集逻辑分离,或用异步IO处理。
  • 验证是否为纯CPU密集任务:若使用了大量持有GIL的Python内置操作,可改用numpy、numba等能释放GIL的库,提升单进程的CPU利用率。

3. 确认进程池配置

确保max_worker设置为16(与核心数一致),避免进程过多导致调度竞争,或进程过少无法占满所有核心。

验证方式

运行代码后,用以下工具确认:

  • top:按P键按CPU使用率排序,查看每个Python进程的CPU占比是否接近100%
  • htop:直观查看每个核心的负载状态,确认每个核心被对应进程占满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:20:17