Flask 3.0 不存在,当前最新稳定版为 Flask 2.3.3;其 async 视图语法合法但需 ASGI 服务器(如 uvicorn)和异步依赖(如 httpx.AsyncClient、asyncpg)才能真正异步执行,否则降级为同步阻塞。

Flask 3.0 原生支持异步视图,但直接写 async def 视图函数并不等于自动获得高并发能力——它只解决 I/O 等待阻塞,不提升 CPU 密集型任务吞吐量,且需配套配置和依赖。
异步视图必须用 async def + 正确的 ASGI 服务器
Flask 3.0 允许视图函数声明为 async,但内置开发服务器(Werkzeug)仍是同步的,无法执行 await。不换服务器,异步视图会报错或退化为同步执行。
- 必须使用 ASGI 服务器:推荐
uvicorn(pip install uvicorn),启动命令为uvicorn app:app - 不能用
flask run启动异步视图,否则会提示RuntimeWarning: Running in debug mode with async views is not supported - ASGI 服务器需显式启用
--workers或配合gunicorn(用gunicorn -k uvicorn.workers.UvicornWorker)才能横向扩展
await 只能用在真正异步的操作上
写 async def 视图后,如果里面全是同步调用(比如 requests.get()、time.sleep()、普通数据库驱动),不仅没提速,还因协程调度带来额外开销。
- HTTP 请求请改用
httpx.AsyncClient或aiohttp.ClientSession - 数据库操作必须用异步驱动:如
asyncpg(PostgreSQL)、aiomysql,ORM 推荐sqlmodel配合async_engine或原生SQLAlchemy 2.0+ async_session -
time.sleep()必须换成await asyncio.sleep(),否则会阻塞整个事件循环
不要在异步视图里混用同步日志、文件读写或全局状态
异步视图运行在事件循环中,同步 I/O(如 open()、logging.info())可能引发隐式阻塞,尤其在高并发下放大延迟。
立即学习“Python免费学习笔记(深入)”;
- 日志建议用
structlog+ 异步处理器,或至少确保logging配置了handlers的非阻塞模式(如QueueHandler) - 文件读写优先走
await aiofiles.open(),避免open().read() - 避免在视图中修改模块级变量或
app.config,协程间共享状态需用asyncio.Lock或contextvars.ContextVar
异步不是银弹——它只对 I/O 密集型场景有效,且要求整条调用链(HTTP 客户端、DB 驱动、缓存客户端)都异步化;漏掉任意一环,就会在某处卡住 event loop。调试时注意看 asyncio.current_task() 和慢查询日志,而不是只盯着视图函数是不是加了 async。


















