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

Python Multiprocessing如何为各进程分配指定CPU数量及监控使用情况

为不同multiprocessing进程分配差异化CPU资源的解决方案

Python标准库的multiprocessing本身没有提供单进程CPU配额配置的接口,你可以通过操作系统层面的能力实现需求,常见方案有两种:

  • CPU亲和性绑定:将高负载的func1绑定到多个CPU核心上运行,低负载的func2仅绑定到单个核心,从核心数量上做资源隔离
  • 进程优先级调整:提高func1的进程调度优先级,降低func2的优先级,操作系统调度时会优先给高优先级进程分配CPU时间

两种方案都可以通过第三方库psutil实现跨平台兼容,示例代码如下:

import psutil
import os
from multiprocessing import Pool

def func1(args):
    # 调整当前进程配置
    proc = psutil.Process(os.getpid())
    # 绑定到前3个CPU核心(可根据你的实际核心数调整)
    proc.cpu_affinity([0,1,2])
    # 提高进程优先级:Linux/macOS下nice值越低优先级越高,普通用户最小可设为0,root可设负值
    proc.nice(-10 if os.name != 'nt' else psutil.HIGH_PRIORITY_CLASS)
    # 原有func1逻辑
    ...

def func2(args):
    proc = psutil.Process(os.getpid())
    # 仅绑定到第4个CPU核心
    proc.cpu_affinity([3])
    # 降低进程优先级
    proc.nice(10 if os.name != 'nt' else psutil.BELOW_NORMAL_PRIORITY_CLASS)
    # 原有func2逻辑
    ...

# 原有进程启动逻辑不变
pool = Pool(processes=2)
pool.apply_async(func1, (args,))
pool.apply_async(func2, (args,))
pool.close()
pool.join()

注意:两个进程存在文件交互时,需要额外加文件锁避免读写冲突,可使用multiprocessing的Lock做跨进程同步。


监控各进程CPU使用的方法

你可以通过两种方式查看进程的CPU占用情况:

  • 代码层面:用psutil遍历进程ID,调用cpu_percent(interval=1)获取单个进程的CPU使用率,调用cpu_affinity()获取进程绑定的CPU核心列表
  • 系统工具层面:Linux/macOS下用top、htop命令,Windows下打开任务管理器的「详细信息」面板,都可以直观看到每个进程的CPU占用率和绑定的核心。

multiprocessing的默认CPU分配规则

multiprocessing本身不负责CPU资源的分配,所有进程的调度都是由操作系统内核完成的,不存在默认平均分配CPU的规则。
如果多个进程优先级相同、且都是CPU密集型任务,操作系统调度器为了均衡负载,通常会让各个进程占用的CPU时间占比接近平均值,但这是操作系统的调度逻辑,和multiprocessing无关。如果进程是IO密集型,或者优先级有差异,CPU占比会出现明显倾斜。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:06:02