flask 3.0 强制要求 asgi 运行时,同步服务器会静默降级为阻塞执行;必须改用 uvicorn 或 hypercorn 等 asgi 服务器,并重构 i/o 操作(如用 httpx/aiohttp/aiosqlite)、避免混用同步代码,否则异步改造无效。

Flask 3.0 强制要求 ASGI 运行时,同步服务器会静默降级
Flask 3.0 不再兼容 WSGI 同步服务器(如默认 flask run 或 gunicorn --worker-class sync)执行 async 路由。如果你没换服务器,async def 视图不会报错,但会被 Flask 自动回退为同步执行——所有 await 都变成阻塞等待,吞吐量反而可能下降。
必须改用 ASGI 服务器:
-
uvicorn myapp:app --reload(推荐,轻量、调试友好) -
hypercorn myapp:app --reload(支持 HTTP/2、更贴近生产) - 不能用
gunicorn默认模式;若坚持用它,需指定--worker-class uvicorn.workers.UvicornWorker
async 路由里混用 requests/time.sleep 会卡死整个事件循环
定义 async def 只是语法许可,不等于自动异步。常见错误是把旧代码直接套壳:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
-
requests.get()→ 必须换成httpx.AsyncClient或aiohttp.ClientSession -
time.sleep(1)→ 必须换成await asyncio.sleep(1) -
sqlite3.connect()→ 必须换成aiosqlite或asyncpg等异步驱动 - 连
logging.info()在高并发下都可能成瓶颈,建议用structlog+ 异步 handler
Flask 3.x 的异步收益完全取决于你是否重构 I/O 操作
框架本身不加速,只提供调度能力。性能提升只在以下情况真实发生:
- HTTP 请求用了
await client.get(),而不是requests.get() - 数据库查询用了
await session.execute()+asyncpg,而不是session.execute()+psycopg2 - 文件读写用了
await anyio.Path(...).read_text(),而不是open().read() - 没在 async 视图里调用未包装的同步函数(Python 3.9+ 可用
await asyncio.to_thread(...)做兜底,但非首选)
同步与异步路由共存时,共享状态极易出错
同一个 Flask 实例里允许 def 和 async def 并存,但它们共享应用上下文。容易被忽略的风险点:
- 全局
dict缓存、普通类实例、未加锁的单例对象,在并发 async 请求下可能被同时读写,导致数据错乱 -
before_request或g对象若在 async 路由中被修改,可能影响后续同步路由的行为 - 日志、配置、连接池等资源初始化,必须区分同步/异步生命周期:用
before_serving(async)而非app.run()里的隐式初始化
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










