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

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


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

1. app.run() 的作用

当你调用:

python 复制代码
app.run()

Flask 会:

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

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

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

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

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


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

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

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

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


🚀 app.run() 的可选参数

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

python 复制代码
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() 的区别

你的代码使用了:

python 复制代码
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() 🚀。

相关推荐
小oo呆4 小时前
【学习心得】Python多线程
python
happylifetree8 小时前
Python70:核心语法-函数进阶-案例2
python
王中阳Go8 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳8 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_9 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
码事漫谈10 小时前
消除AI幻觉,普通人能做的五件事
后端
supabc12310 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi11 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi11 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
金銀銅鐵11 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程