当前位置: 首页 > news >正文

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__': 只运行一次,但开发过程中失去了自动重载功能。

相关文章:

  • Python教程(四)——数据结构
  • 画立方体软件开发笔记 js three 投影 参数建模 旋转相机 @tarikjabiri/dxf导出dxf
  • 常见音频主控芯片以及相关厂家总结
  • win10-启动django项目时报错
  • Go语言——goflow工作流使用
  • MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
  • 访问者模式(Visitor Pattern)详解
  • excel大表导入数据库
  • RAG 2.0 深入解读
  • OSPF不规则区域划分
  • 从代码学习深度学习 - 语义分割和数据集 PyTorch版
  • 部署RocketMQ
  • 垃圾对象回收
  • 2025年5月15日前 免费考试了! Oracle AI 矢量搜索专业​​认证
  • 青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)
  • [虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)
  • LeetCode热题100--240.搜索二维矩阵--中等
  • kotlin flow防抖
  • 聊一聊接口测试时如何处理接口或版本变更
  • 基于STM32的甲醛检测
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 国家主席习近平会见斯洛伐克总理菲佐
  • 涨知识|没想到吧,体育老师强调的运动恢复方法是错的?
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获
  • 黄晨光任中科院空间应用工程与技术中心党委书记、副主任
  • 戴维·珀杜宣誓就任美国驻华大使