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

使用joblib遇AttributeError,设置CPU亲和性失败且仅用2核

解决joblib仅用2核+psutil旧版本亲和性设置报错问题

先搞定psutil的报错问题

你碰到的AttributeError: 'Process' object has no attribute 'set_cpu_affinity'完全是版本锅——set_cpu_affinity是psutil 5.5.0才新增的方法,而你用的5.4.3还没这个接口。

不想升级的话,旧版本里用cpu_affinity()方法就能实现同样的功能,直接传入要绑定的CPU核列表就行:

import psutil
p = psutil.Process()
# 绑定到全部8个核(核编号从0开始)
p.cpu_affinity([0, 1, 2, 3, 4, 5, 6, 7])

如果能升级psutil,直接跑这条命令就行,升级后就能用set_cpu_affinity了:

pip install --upgrade psutil

再解决joblib只用到2核的问题

默认情况下joblib应该会使用multiprocessing.cpu_count()返回的核数,但实际没用到的话,可以试试这几个方案:

  • 显式指定核数:在Parallel里直接设置n_jobs=8(或者n_jobs=-1表示用全部可用核),同时可以指定backend为multiprocessing避免loky后端的潜在限制:
    from joblib import Parallel, delayed
    
    Parallel(n_jobs=8, backend="multiprocessing")(
        delayed(your_process_function)(filename) for filename in pdb_name_list
    )
    
  • 子进程内设置亲和性:如果需要更精细的核分配,比如给每个子进程绑定特定的核,可以在任务函数开头添加亲和性设置逻辑:
    def your_process_function(filename):
        # 给当前子进程绑定指定核
        p = psutil.Process()
        # 这里可以根据任务分配不同的核,比如按进程ID分片
        p.cpu_affinity([...])
        # 你的任务逻辑代码
        ...
    
  • 系统层面绑定:如果是Linux系统,也可以用taskset命令在启动脚本时直接绑定CPU,不用改代码:
    # 绑定到0-7号核,然后启动脚本
    taskset -c 0-7 python your_script.py
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:20:56