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

Python multiprocessing示例运行报AttributeError问题求助

报错成因

这个错误与multiprocessing的进程启动机制和Spyder的运行环境特性直接相关:

  • Windows、macOS系统下Python的multiprocessing默认采用spawn方式创建子进程,子进程启动时会重新导入主模块,需要通过序列化/反序列化(pickle)传输你定义的目标函数
  • Spyder默认使用IPython交互控制台运行代码,此时__main__模块是IPython的内置模块,你在控制台/当前脚本里定义的函数不会被挂载到子进程读取的__main__模块属性中,导致反序列化时找不到目标函数。

可行解决方案

方案1:终端直接运行脚本(最稳定)

将你的完整代码保存为独立的.py文件,比如parallel_task.py,直接通过系统命令行/终端执行命令:
python parallel_task.py
官方示例代码用这种方式运行可以得到正确输出,完全适配你将无依赖for循环并行的需求。

方案2:调整Spyder运行配置

如果需要在Spyder环境内运行,可修改运行设置:

  1. 点击顶部菜单栏「Run」→「Run configuration per file」
  2. 勾选「Execute in an external system terminal」选项,保存后再运行代码即可。

方案3:拆分目标函数到独立模块

把你要并行执行的目标函数单独写到一个额外的.py文件中,主运行脚本从该文件导入函数即可避免报错,示例如下:

  1. 新建task_funcs.py,写入:
def f(x):
    return x*x
# 你原本要并行的所有任务函数都可以放在这个文件里
  1. 主运行脚本:
from multiprocessing import Pool
from task_funcs import f

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

这种方式也可以直接在Spyder默认的IPython控制台中正常运行。

业务场景适配说明

你原本的无依赖多组数据循环计算场景完全可以用multiprocessing实现并行提速,你只需要把循环中每轮要执行的逻辑封装为独立函数,用Pool.map或者Pool.apply_async替换原有循环即可,无需修改核心运算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

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