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

Flask的app.run()里发生了什么

是的,app.run() 内部实际上包含一个 事件循环,类似于一个 while True,用于不断监听和处理 HTTP 请求。


🔍 app.run() 里发生了什么?

1. app.run() 的作用

当你调用:

app.run()

Flask 会:

  1. 启动一个内置的开发服务器(Werkzeug)
  2. 不断监听 HTTP 请求
  3. 调用相应的路由函数
  4. 返回响应给客户端
  5. 重复这个过程,直到你手动停止(Ctrl+C)

2. app.run() 内部的 while 机制

虽然 Flask 代码中没有直接写 while True,但它的 事件循环(Event Loop) 本质上是一个无限循环,类似于:

while True:
    request = 等待新的HTTP请求()
    response = 处理请求(request)
    发送响应(response)

这个循环会一直运行,直到 Flask 服务器被终止。


3. 为什么 app.run() 会一直运行?

Flask 的 run() 方法内部调用了 Werkzeug 开发服务器,其中的 BaseWSGIServer.serve_forever() 负责处理请求:

class BaseWSGIServer:
    def serve_forever(self):
        while True:
            self.handle_request()  # 等待并处理请求

这说明 Flask 服务器本质上是 一个不断处理请求的循环


🚀 app.run() 的可选参数

app.run() 可以传递一些参数,比如:

app.run(host="0.0.0.0", port=5000, debug=True)
参数作用
host="0.0.0.0"允许外部访问(默认 127.0.0.1 仅本机访问)
port=5000监听的端口号(默认 5000)
debug=True开启调试模式(支持热重载)

🔍 waitress.serve(app)app.run() 的区别

你的代码使用了:

from waitress import serve
serve(app, host="0.0.0.0", port=5000)

🔹 waitress.serve(app) 也是 一个事件循环,但它比 Flask 内置服务器更稳定,适合 生产环境
🔹 app.run() 适用于 开发环境,不适合正式部署。


✅ 总结

app.run() 内部有类似 while True 的循环,用于不断监听请求并返回响应。
waitress.serve(app) 也有事件循环,但更适合生产环境。
✔ 在生产环境,推荐使用 Waitress / Gunicorn / uWSGI 代替 app.run() 🚀。

相关文章:

  • 20250324-使用 `nltk` 的 `sent_tokenize`, `word_tokenize、WordNetLemmatizer` 方法时报错
  • 前端 Babel 入门简介
  • 系统思考与心智模式
  • 计算机网络--第四章 网络层(1)
  • 基于SpringBoot的“社区居民诊疗健康管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 聊聊langchain4j的Code Execution Engine
  • 基于Java的科研成果统计系统的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • CANopen基本理论
  • 2025年- G27-Lc101-542. 01 黑客帝国--java版
  • 2024年认证杯SPSSPRO杯数学建模B题(第二阶段)神经外科手术的定位与导航全过程文档及程序
  • 欧拉角与法向量之间的相互转换(附代码)
  • Cursor+Claude-3.5生成Android app
  • HuggingFace Transformers
  • 【算法笔记】图论基础(二):最短路、判环、二分图
  • Python-金融相关代码讲解
  • 详解Redis 核心特性与基础
  • 【C】高效的 GPIO 读取编码方式
  • 深入理解智能家居领域中RS485、Modbus、KNX 和 Zigbee协议概念
  • AI编程工具
  • 从切图仔到鸿蒙开发01-文本样式
  • 保险经纪公司元保在纳斯达克挂牌上市,去年净赚4.36亿元
  • 五一假期,这些短剧值得一刷
  • 抗美援朝老战士宁昭逝世,享年93岁
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • 夜读丨跷脚牛肉乐翘脚