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

如何解决使用pandarallel时出现的“Can't pickle local object”错误

解决pandarallel中parallel_apply触发的Pickle序列化错误

刚碰到这个AttributeError: Can't pickle local object 'prepare_worker..closure..wrapper'错误的时候我也头大过,本质是pandarallel用多进程执行任务时,Python需要把函数序列化(pickle)后传给子进程,但本地对象(比如脚本里定义的函数)有时候没法被标准pickle正确处理。

针对你的代码,我整理了几个靠谱的解决办法:

1. 切换到fork模式初始化pandarallel

在Linux/macOS这类类Unix系统下,fork模式会直接复制父进程的内存空间,不需要严格pickle函数,能绕过大部分序列化问题。修改初始化代码就行:

pandarallel.initialize(nb_workers=4, use_fork=True)

这个方法最简单,对大多数场景都有效。

2. 确保函数在模块顶层定义

虽然你的func已经是顶层定义,但如果是在Jupyter Notebook这类交互式环境里运行,有时候函数会被识别为本地对象。这时候可以把函数单独放到一个.py文件里作为模块导入:
比如新建my_functions.py:

def func(x):
    return x

然后在主脚本/Notebook里导入:

from my_functions import func

模块级别的函数序列化起来毫无压力。

3. 改用cloudpickle作为序列化后端

标准pickle支持的类型有限,cloudpickle能处理更多复杂对象,包括本地函数。先安装cloudpickle:

pip install cloudpickle

然后初始化pandarallel时指定用它:

pandarallel.initialize(nb_workers=4, pickle_lib="cloudpickle")

这个方法兼容性最好,Windows系统也能用上。

你可以先试试第一个方案,修改后运行你的代码应该就能正常执行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:32:34