Python多进程编程遇EOFError:如何解决该问题?
解决multiprocessing中的EOFError问题
错误原因
在Windows系统中,Python的multiprocessing模块默认使用spawn方式创建子进程,这种方式会重新导入主模块。如果直接在模块顶层执行class1()创建实例,子进程启动时会再次执行这段代码,导致无限递归创建进程,最终触发EOFError(pickle读取父进程传递的数据时出现异常)。
修复方案
必须将启动代码放在if __name__ == '__main__':判断块中,确保只有主进程会执行启动逻辑,子进程导入模块时不会重复执行这段代码。
修改后的代码
from multiprocessing import Process class class1: def __init__(self): super().__init__() txt = "Rachid" p1 = class2(txt) p1.start() p1.join() class class2(Process): def __init__(self, txt): Process.__init__(self) self.txt = txt def run (self): print("*"*10) print(self.txt) print("*"*10) if __name__ == '__main__': class1()
额外说明
- 这是Windows平台使用
multiprocessing的通用规范,所有启动子进程的逻辑都必须放在if __name__ == '__main__':内部。 - 如果实际代码中还有需要在子进程中使用的自定义对象,要确保这些对象是可pickle序列化的,否则也可能引发类似的序列化错误。
内容的提问来源于stack exchange,提问作者RACHID BEN ABDELMALEK
相关产品推荐
相关产品推荐

