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

Python使用Joblib并行时出现assignment destination is read-only错误如何解决

根本原因

你遇到的ValueError: assignment destination is read-only报错核心由Joblib loky多进程后端的内存优化机制导致:

  • Joblib默认使用loky后端启动多进程时,为了降低父进程向子进程传递数据的内存拷贝开销,会将传递的大数据对象(此处为pandas groupby生成的每个group切片)封装为只读共享内存对象
  • 你传入的func函数内部尝试直接修改传入的group对象(比如新增列、修改单元格值等操作),就会触发只读内存的写入限制
可尝试的解决方法
  • 方法1:在func内部先对传入的group做深拷贝再操作
    无需修改外层逻辑,仅在func的第一行添加group = group.copy(deep=True),后续所有修改都针对拷贝后的可写对象执行即可,是成本最低的修复方案。
  • 方法2:修改Joblib并行参数,关闭共享内存优化
    给Parallel新增max_nbytes=None参数,强制所有数据走序列化拷贝而非共享内存传递,修改后的代码如下:
    retLst = Parallel(n_jobs=(multiprocessing.cpu_count() // 2), max_nbytes=None)(delayed(func)(group,
                                                                                       self.__class__.config)
                                                                         for name, group in dfgroup)
    
    注意该方案在数据量较大时会提升内存占用。
  • 方法3:调整func逻辑,不直接修改入参group
    重写func实现,所有修改操作都基于原group生成新的DataFrame对象返回,完全避免修改入参,从根源上规避只读对象写入问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:18:03