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

mmpy_bot集成测试报Can't pickle local object错误求解

问题原因

  • 报错本质是Python pickle 序列化模块不支持序列化函数内部定义的局部闭包,错误信息中提到的run_bot就是定义在start_bot函数内部的局部函数。
  • 该问题仅在MacOS环境复现的核心逻辑为:Linux系统下Python multiprocessing 模块默认使用fork模式启动子进程,该模式不需要序列化父进程的目标函数即可直接创建子进程;而MacOS从Python 3.8版本开始,multiprocessing 默认启动方式修改为spawn,该模式需要将要执行的目标函数序列化后传递给子进程,碰到局部闭包就会触发序列化失败报错。

解决方法

方案1:强制指定multiprocessing启动模式为fork(推荐,改动最小)

在测试执行脚本base-test.py的最开头添加如下代码即可:

import multiprocessing
multiprocessing.set_start_method("fork", force=True)

该方案完全兼容原有测试逻辑,不需要修改官方工具代码,普通集成测试场景下无兼容性问题。

方案2:重构局部函数为全局函数

如果不想修改进程启动模式,可以修改utils.py代码:将start_bot内部定义的run_bot函数提到模块全局层级,把函数依赖的外部变量改为参数传入,pickle即可正常序列化全局函数。

方案3:降级Python版本

使用Python 3.7及更早版本运行测试,该版本区间下MacOS的multiprocessing默认启动模式仍为fork,可直接避开该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:45:10