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

如何修复Python多进程中的AttributeError错误?

Python多进程AttributeError错误原因及修复方法

错误原因

  • Windows系统下Python多进程采用spawn模式创建子进程,子进程会重新导入主模块。Spyder运行脚本时,主模块为__main__,但子进程导入时找不到do_something函数——要么是函数定义被放在了if __name__ == '__main__':代码块内部(子进程不会执行该代码块),要么是Spyder的默认运行环境导致主模块的命名空间未被正确传递给子进程。
  • 你能看到最终耗时打印,是因为主进程未受影响,但子进程启动时找不到目标函数,抛出错误。

修复方法

方法1:调整代码结构

把do_something函数定义放在if __name__ == '__main__':代码块之外,确保子进程导入主模块时能找到该函数。示例代码:

import time
from multiprocessing import Process

# 函数定义放在主判断代码块之外
def do_something(seconds):
    print(f'Sleeping {seconds} second(s)...')
    time.sleep(seconds)
    print('Done sleeping')

if __name__ == '__main__':
    start = time.perf_counter()

    # 创建并启动子进程
    p1 = Process(target=do_something, args=(1,))
    p2 = Process(target=do_something, args=(1,))
    p1.start()
    p2.start()

    # 等待子进程完成
    p1.join()
    p2.join()

    finish = time.perf_counter()
    print(f'Finished in {round(finish-start, 2)} second(s)')

方法2:修改Spyder运行设置

Spyder默认的图形后端可能导致主模块命名空间无法被子进程正确识别,可通过以下步骤调整:

  • 打开Spyder,依次点击 Tools > Preferences > IPython console > Graphics
  • 在Graphics backend区域,将后端选项从Inline改为Automatic或Qt5
  • 重启IPython控制台后重新运行脚本,也可直接在控制台输入%matplotlib auto临时切换后端。

内容的提问来源于stack exchange,提问作者Mahmoud Abdel-Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:39:56