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

Multiprocessing报错AttributeError:无法获取__mp_main__模块的do_something属性

解决multiprocessing中的AttributeError问题

报错信息

运行代码时终端出现如下错误:

AttributeError: Can't get attribute 'do_something' on <module '__mp_main__' from 'x.py'>

原代码

import multiprocessing
import time

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

    def do_something():
        print('Sleeping 1 second...')
        time.sleep(1)
        print('Done sleeping...')

    p1 = multiprocessing.Process(target=do_something)
    p2 = multiprocessing.Process(target=do_something)

    p1.start()
    p2.start()

    # Call join() to wait for processes to finish running
    p1.join()
    p2.join()

    finish = time.perf_counter()

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

问题原因

在Windows系统中,multiprocessing创建子进程时会重新导入主模块。但你把do_something函数定义在了if __name__ == '__main__':代码块内部——子进程导入主模块时,这个代码块不会执行,所以子进程找不到该函数,直接抛出AttributeError。

修复方案

把do_something函数移到if __name__ == '__main__':代码块外面,让子进程能正常导入到这个函数。

修复后的代码

import multiprocessing
import time

def do_something():
    print('Sleeping 1 second...')
    time.sleep(1)
    print('Done sleeping...')

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

    p1 = multiprocessing.Process(target=do_something)
    p2 = multiprocessing.Process(target=do_something)

    p1.start()
    p2.start()

    # 等待进程执行完毕
    p1.join()
    p2.join()

    finish = time.perf_counter()

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

预期输出

Sleeping 1 second...
Sleeping 1 second...
Done sleeping...
Done sleeping...
Finished in 1 second(s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:42:46