flask 3.x并不存在,当前最新稳定版为2.3.3;所谓“3.x”多为误传,flask 2.0+的async支持需asgi服务器(如uvicorn)及werkzeug≥2.0配合,否则async视图将降级为同步执行。

Flask 3.x根本不存在,别被版本号误导
Flask 当前最新稳定版是 2.3.3(截至2026年4月),官方没有发布过 Flask 3.x。PyPI、GitHub 官仓、Werkzeug 依赖链、Flask 文档均无任何 3.0.0 或更高主版本的发布记录。所谓“Flask 3.x”多为误传、混淆(比如把某个第三方 fork 或内部定制分支当成了官方版本),或把 FastAPI/Django 的版本节奏套用到了 Flask 上。
Flask 2.0+ 的 async 支持实际依赖 ASGI 服务器和底层适配
Flask 2.0 引入的 async def 视图不是“开箱即用”的异步能力,它只是语法层支持——真正生效的前提是:部署时必须使用 ASGI 服务器(如 Uvicorn、Hypercorn 或 gunicorn + uvicorn.workers.UvicornWorker),且 Werkzeug 版本 ≥ 2.0(Flask 2.0 默认捆绑)。
- 用
flask run启动?——仍是同步 WSGI 模式,async视图会被降级为同步执行,await语句会阻塞线程 - 没装
uvicorn却配了gunicorn -k uvicorn.workers.UvicornWorker?——启动失败,报错ModuleNotFoundError: No module named 'uvicorn' - Werkzeug async 视图直接抛
RuntimeError: Async views require Werkzeug >= 2.0
实测对比:同一段 async 视图在不同部署下的表现差异
以这个典型路由为例:
@app.route('/api/fetch')
async def fetch_data():
await asyncio.sleep(1)
return {'ok': True}
在三种常见部署方式下行为完全不同:
-
flask run(WSGI + dev server):100 个并发请求 → 平均响应时间 ≈ 100×1s = 100s,请求排队严重 -
gunicorn -w 4 -b :5000 app:app(WSGI + 多进程):仍阻塞,只是分摊到 4 个进程,吞吐量线性受限 -
uvicorn app:app --workers 4(ASGI + 多进程 + 协程):100 并发可基本保持 ≈ 1s 响应,CPU 利用率低,连接复用高效
关键点不在 Flask 版本号,而在整个调用链是否完成 ASGI 对齐:Flask → Werkzeug → ASGI Server → OS socket 层。
真正影响性能的不是“有没有 async”,而是 I/O 是否真异步
写了 async def 不等于自动获得性能提升。常见陷阱包括:
- 在
async视图里调用同步数据库驱动(如sqlite3、psycopg2)——整个协程被阻塞,等同于同步 - 混用
time.sleep()而非asyncio.sleep()——直接挂起事件循环 - 未替换 HTTP 客户端:用
requests.get()替代aiohttp.ClientSession.get(),照样阻塞 - ORM 层没切异步:SQLAlchemy 2.0+ 提供
AsyncSession,但需显式配置create_async_engine,否则session.execute()仍是同步调用
async 视图只是入口开关,背后整条 I/O 链路都得是协程友好的,否则就是“穿西装戴草帽”——表面异步,内里全堵死。










