python 程序一次启动有两个进程的问题(flask)

server/2025/3/10 2:53:37/

0. 背景

写了一个使用 flask 作为服务框架的程序,发现每次启动程序的时候,使用 ps 都能观察到两个 python 进程。

此外,这个程序占用了 GPU 资源,我发现有两个 python 进程,分别占用了完全相同的 GPU 显存

1. 原因

问题出在 flask 的启动方式上,我启动的时候,是这样启动的

python">app.run(debug=True, host='0.0.0.0', port=5000)

查到的资料如下,Flask 中的 debug 参数有以下主要作用:

debug=True 的特性:

  • 自动重载
    • 当源代码文件发生变化时,Flask 服务器会自动重启
    • 适合开发阶段,可以即时看到代码修改的效果
  • 详细的错误页面
    • 当应用出错时,会显示详细的错误信息和调用栈
    • 包含交互式调试器,可以在网页上直接检查变量值
  • 双进程模式
    • 启动一个主进程用于监视代码变化
    • 启动一个子进程用于处理实际请求

debug=False 的特性:

  • 单进程运行
    • 只有一个进程处理请求
    • 代码修改后需要手动重启服务器
  • 简化的错误响应
    • 出错时只返回基本的错误信息
    • 不显示调试信息,更安全

我们看到,当 debug 为 True 的时候,会出现双进程的情况。

2. 解决办法

方案1:将 debug 设置为 False,可以结合环境变量设置线上和开发使用不同的配置

方案2:使用 os.environ.get('WERKZEUG_RUN_MAIN') 来检测执行进程,资源消耗性操作只在单独进程中执行

3. 题外话

  1. 之前开发过程中,还遇到某些版本 flask 启动 debug 为 True 时内存一直泄露的问题
  2. flask 默认的网络服务器为基于 Werkzeug 实现的一个简单的开发服务器,线上环境中问题较多,例如性能较差、安全性不足等。老的版本还出现过并发量较大时服务被打挂无法恢复的问题。
  3. 生产环境,最好使用例如 gunicorn 这样的更专业的服务器来托管 flask 程序。

http://www.ppmy.cn/server/173827.html

相关文章

2025 年开源替代方案为何正在取代 OutSystems?技术自由度与成本优势深度解析

原文链接:https://www.nocobase.com/cn/blog/outsystems-open-source-alternatives OutSystems 的隐藏成本不只是金钱 OutSystems 是企业低代码开发领域的领军者。通过将生成式 AI 工具深度集成到软件生命周期,OutSystems 助力企业快速构建客户导向的门…

【UI自动化技术思路分析】【总纲】UI自动化代码完整设计思路

一、自动化框架散装思路 🔖 代码结构如下所示 🗂️ UIAutomationTools:UI自动化操作工具 📁 app: 业务功能代码 ui_automation.py:为 Android 设备提供 UI 自动化操作的工具类 📁 case&#…

鸿蒙生态日日新,鸿蒙原生版支付宝下载量突破230万

鸿蒙生态日日新PLOG:鸿蒙原生版支付宝下载量突破230万,持续迭代性能提升15%,越来越好用;掌上生活、美柚等多款应用功能更新。

vue知识点(1)

ref和reactive的区别 ref 用途:用于创建一个响应式的基本类型(string、number、boolean)或者引用类型(object、array)的数据。 返回值:返回一个带有.value属性的对象,访问或者修改数据时需要通…

大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景

大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景 答题思路 先解释 transform 属性是啥:让大家明白 transform 是 CSS 里用来对元素进行变形操作的一个属性,就像有个神奇的工具能改变元素的样子。分别介…

【2025】基于Python+Django的酒店民宿预订管理系统(源码+调试+答疑+学习资料)

目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图: 该项目含有源码、文档、PPT、图文修改教程、配套开发软件、软件安装教程、项目发布教…

setlocale()的参数,“zh_CN.UTF-8“, “chs“, “chinese-simplified“的差异。

在 C/C 中,setlocale() 函数的参数 zh_CN.UTF-8、chs 和 chinese-simplified 均用于设置中文简体环境,但它们的语义、平台支持和编码行为存在显著差异: ​1. zh_CN.UTF-8(推荐)​ ​含义: zh_CN: 中文&…

【Spring Boot 接入 MongoDB】

【Spring Boot 接入 MongoDB】 在 Spring Boot 项目中接入 MongoDB 是一个常见的需求&#xff0c;以下是详细的步骤和配置方法&#xff1a; 1. 添加依赖 在 pom.xml 文件中添加 Spring Data MongoDB 的依赖。 <dependency><groupId>org.springframework.boot<…