Python使用multiprocessing调用目标函数报AttributeError如何解决
报错产生原因
- Windows系统下Python的
multiprocessing模块默认使用spawn方式创建子进程,该模式下子进程会重新导入当前主模块执行代码。如果创建进程的代码没有加if __name__ == '__main__'保护,子进程导入模块时会重复执行创建进程的逻辑,且会出现函数属性读取失败的问题。 - 若你在交互式运行环境(如Jupyter Notebook、IDLE交互模式、Python命令行解释器)中直接运行该代码,内置的
__main__模块的属性无法被子进程正常获取,也会触发该报错。
修复方案
- 给所有启动子进程的逻辑添加
if __name__ == '__main__'包裹,确保只有主进程执行启动逻辑,子进程导入时不会重复执行 - 不要在交互式环境中直接运行多进程代码,将代码保存为独立的
.py文件后,通过Python命令行执行该文件。
修复后可运行代码
import multiprocessing import time def run(): print('sleeping for 1 second') time.sleep(1) print('done sleeping') if __name__ == '__main__': start = time.perf_counter() p1 = multiprocessing.Process(target=run) p2 = multiprocessing.Process(target=run) p1.start() p2.start() p1.join() p2.join() finish = time.perf_counter() print(f'Finished in {round(finish-start, 2)} second(s)')
内容的提问来源于stack exchange,提问作者KAOTU
相关产品推荐
相关产品推荐

