Flask 调试的时候进入main函数两次

在 Flask 开启 Debug 模式时,程序会因为自动重载(reloader)的机制而启动两个进程,导致if __name__ == '__main__'底层的程序代码被执行两次。以下说明其原理与常见解法。

Flask Debug 模式下自动重载机制
Flask 使用的底层服务器 Werkzeug,在 Debug 模式时会启动一个监控文件变化的子进程,主进程负责监控、子进程负责执行应用程序,当检测到文件变更时才重新启动子进程。这个过程中,原始程序在主进程和子进程都会运行一次,从而触发「执行两次」2

当你用 debug=True 启动 Flask 应用时,Flask 会启用它的开发服务器,同时开启一个自动重载功能,用来监视项目中的文件修改。一旦文件发生变动,它会自动重启服务器。

自动重载器工作流程如下:

第一次运行(父进程): 你的脚本(
weba2f.py
)被首次执行,这个初始进程成为"监视器"或"父进程"。它会加载你的代码,包括 if name == 'main': 块,然后准备启动实际的应用服务器。
第二次运行(子进程): 父进程生成一个新的"子进程",这个子进程会重新执行你的脚本(
weba2f.py
)。这次运行是在子进程中负责实际的 Flask 应用,并处理 HTTP 请求。if name == 'main': 的代码块会在这个子进程中再次执行。

如何避免代码被执行两次(如果有必要)
如果某些代码(例如 USD 文件的加载)不应该运行两次,有以下几种解决方法:

方法 1:禁用自动重载功能(失去文件变更自动重启功能)
可以关闭自动重载器,修改 app.run 调用如下:

weba2f.py

Apply
// ...代码其他部分...

if name == 'main':
tsundere_chat = TsundereChat()

通过 /A2F/USD/Load 加载 USD 文件到场景中

url = a2fserverurl + '/A2F/USD/Load'
headers = {
'accept': 'application/json',
'Content-Type': 'application/json'
}
data = {
"file_name": usd_url
}

response = requests.post(url, headers=headers, json=data)

打印响应内容

print("USD 文件加载响应:", response.json())

app.run(port=5000, debug=True, use_reloader=False) # 添加 use_reloader=False
这样可以确保 if name == 'main': 只运行一次,但开发过程中失去了自动重载功能。

相关推荐
STLearner1 小时前
ICML 2026 | LLM×Graph论文总结[1]【图基础模型,文本属性图,多模态属性图,图对齐,图提示学习,关系深度学习
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
习明然2 小时前
我的本地化AI项目(三)
人工智能·python·electron·c#·avalonia
喜欢的名字被抢了2 小时前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
夏季疯4 小时前
读论文:STARS 是什么结构?一个统一的歌声自动标注框架
python
遨游DATA4 小时前
Spring Boot 启动失败排查:如何区分多 Bean 冲突与清理阶段异常
java·spring boot·后端
IT_陈寒4 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
掉头发的王富贵4 小时前
我来入职新公司两个月了,为什么只写了100行代码?
后端·ai编程
从零开始的代码生活_5 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
31535669135 小时前
Superpowers:GPT-5.6 时代下的流程毒瘤
前端·后端
光测实验室5 小时前
3种Python降噪算法实测:我把处理速度提升了20倍
python