Python运行multiprocessing多进程代码报bootstrapping phase错误如何解决
报错根本原因
Python的multiprocessing模块在Windows、macOS等系统上默认使用spawn模式启动子进程,该模式下子进程会重新导入整个主模块的所有顶层代码执行。你将multiprocessing.Manager()初始化、共享列表创建等逻辑放在了if __name__ == '__main__'守卫之外,子进程导入模块时会再次执行这些代码,而Manager本身也需要启动子进程,此时当前子进程还未完成启动初始化,就触发了该RuntimeError。
排查修复方案
- 所有和多进程初始化相关的顶层代码,全部移动到
if __name__ == '__main__'代码块内部,避免子进程导入时重复执行。 - 建议将共享变量
final_list作为参数传入工作函数,减少全局变量依赖,降低跨进程共享的异常概率。 - 如果程序需要打包为可执行文件,在
if __name__ == '__main__'的第一行添加multiprocessing.freeze_support()即可,普通脚本运行无需添加该行。
修复后的可运行代码如下:
import multiprocessing def worker(data, final_list): for item in data: final_list.append(item) if __name__ == '__main__': manager = multiprocessing.Manager() final_list = manager.list() input_list_one = ['one', 'two', 'three', 'four', 'five'] input_list_two = ['six', 'seven', 'eight', 'nine', 'ten'] process1 = multiprocessing.Process(target=worker, args=(input_list_one, final_list)) process2 = multiprocessing.Process(target=worker, args=(input_list_two, final_list)) process1.start() process2.start() process1.join() process2.join() print(final_list)
内容的提问来源于stack exchange,提问作者Ehsan Akbar
相关产品推荐
相关产品推荐

