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

Python 3.6.5多进程报错:非__main__启动进程的解决方案求助

解决非__main__模块启动多进程的RuntimeError问题

这个报错的核心原因是Python在使用spawn启动子进程时(比如Windows系统或Python 3.4+部分默认配置),会重新加载整个主模块。如果主模块没有做防护,代码会在子进程中重复执行,导致进程启动逻辑被递归触发,最终抛出错误。哪怕进程是在子模块里启动的,主入口的防护依然是关键。

具体修改方案

只需要给主入口文件one.py加上if __name__ == '__main__':的防护逻辑即可,其他文件无需改动:

修改后的one.py

import two

if __name__ == '__main__':
    # 只有当脚本作为主程序运行时才执行调用逻辑
    two.call3('txt here')

two.py保持不变

import three
import multiprocessing

def call3(txt1):
    test = multiprocessing.Process(target=three.test1, kwargs={"txt1": txt1})
    test.start()

three.py保持不变

def test1(txt1):
    print(txt1)

原理说明

当你运行one.py时:

  1. 主进程中__name__的值是'__main__',所以会执行two.call3('txt here'),进而创建子进程。
  2. 子进程启动时,会重新导入one.py,但此时__name__不再是'__main__'(而是子进程的模块名),所以不会执行two.call3,避免了递归创建进程的问题。
  3. 子进程正常加载two.py和three.py,执行three.test1函数,打印出内容。

另外,multiprocessing.freeze_support()只有在你要把程序打包成可执行文件时才需要添加,普通运行场景可以省略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:47:30