全书目录

第二十九篇:Flask 完全指南 —— 轻骑兵微服务街区宇宙

第十五章:`async` 真相 —— Flask 能跑异步,但它不是 async-first 街区

2 分钟 460 字 第 532 / 962 个阅读单元

到 2026-03-28,Flask 官方仍明确支持 async / await,前提是安装 async extra:

bash
pip install "flask[async]"

然后你可以写:

py
from flask import Flask

app = Flask(__name__)

@app.get("/remote-summary")
async def remote_summary():
    data = await fetch_remote_data()
    return {"summary": data}

但这里最重要的不是“能写”,而是“怎么理解”。

官方文档强调的关键事实是:

Flask 作为 WSGI 应用,每个请求仍然会占住一个 worker。 异步视图的价值主要是:

  • 在单个请求内部并发等待多个 IO
  • 能更自然接 async 风格库
  • 不是自动把整站并发模型升级成 ASGI

所以一定别误会成:

  • “用了 async def 就能无限并发”
  • “Flask 现在就等于 Quart/FastAPI 的并发模型”
  • “我可以在视图里 asyncio.create_task() 当后台任务队列用”

官方也明确提醒:

后台任务更适合交给真正任务队列。 如果你的系统主要是 async codebase、长连接、WebSocket、大量并发 IO,应该认真评估 Quart 这类 ASGI-first 方案。

一句话记忆:

text
Flask async = 轻骑兵开始会骑摩托
Quart / ASGI = 整个街区道路系统都为高速异步修的

别把“能用异步语法”误判成“框架本体已经 async-first”。