flask 3.0原生支持async视图,但仅在asgi服务器(如uvicorn、hypercorn)下生效;若用flask run或wsgi模式,会报错或静默降级为同步执行,且必须禁用requests、time.sleep等阻塞操作,改用httpx.asyncclient、await asyncio.sleep()等异步方案。

Flask 3.0 原生支持 async 视图,但“能写 async”不等于“性能自动提升”——它只在 ASGI 环境下生效,且必须避开阻塞操作,否则会 silently 退化为同步执行。
async 视图必须配 ASGI 服务器,flask run 不行
Flask 内置开发服务器(flask run)是 WSGI 实现,根本不理解 await。即使你写了 async def,运行时要么报 RuntimeError: Attempted to run async function synchronously,要么静默降级为同步执行——压测时发现 QPS 没涨,大概率就是卡在这儿。
- 开发阶段可用
uvicorn myapp:app --reload启动,它会自动识别async路由 - 生产环境禁用
gunicorn默认 WSGI 模式(gunicorn myapp:app),改用其 ASGI 模式:gunicorn -k uvicorn.workers.UvicornWorker myapp:app -
hypercorn是更轻量的纯 ASGI 选项:hypercorn myapp:app
异步视图里不能用 requests、time.sleep、sqlite3
这些全是同步阻塞调用,塞进 async 函数里不会变快,反而会卡住整个事件循环,让所有并发请求排队等待。
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- HTTP 请求:换
httpx.AsyncClient或aiohttp.ClientSession,不是requests.get() - 延时:用
await asyncio.sleep(1),不是time.sleep(1) - 数据库:PostgreSQL 用
asyncpg,SQLite 用aiosqlite,SQLAlchemy 2.0+ 配create_async_engine - 文件读写:避免
open(),改用anyio.Path或aiopath
混用同步/异步逻辑没问题,但别在 async 里调 current_app 或 request 的阻塞方法
request 和 current_app 在 async 视图中仍可访问,它们基于 contextvars 实现协程局部存储——这点和线程局部不同。但要注意:
- 直接读
request.args、request.json是安全的 - 调用
request.get_data()(无参数)会触发同步 body 解析,可能阻塞;应显式加parse_form=False或用await request.get_data()(需 Flask ≥ 3.0.3) - 扩展如
Flask-SQLAlchemy旧版不支持 async,若用了db.session.query(...).all()会崩;必须确认扩展声明支持 async 或换用SQLModel+async_engine
后台任务不能靠 asyncio.create_task(),得用队列或线程池
async 视图函数返回后,事件循环就停了,asyncio.create_task() 启动的任务会被立刻 cancel。想“立即响应 + 异步处理”,得绕开 event loop 生命周期:
- 简单场景:用
threading.Thread(target=func, daemon=True).start(),但要提前提取所需数据(request在线程里不可用) - 健壮方案:用
after_request钩子,在响应已构建、上下文尚存时启动后台线程 - 生产级:接入
celery或rq,把耗时逻辑扔到独立 worker 进程
最易被忽略的是上下文生命周期——request 对象只活到响应发出前,任何延迟访问都会报 RuntimeError: Working outside of application context。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










