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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:03:19