fastapi 的 async def 路由中禁用 requests.get、time.sleep()、sqlite3.connect() 等同步阻塞操作;应改用 httpx.asyncclient、await asyncio.sleep()、aiosqlite 或 asyncpg;cpu 密集任务需用 asyncio.to_thread 或 run_in_executor;并发需用 asyncio.gather 或 create_task,避免串行 await。

async def 里调用了 requests.get 就卡住
FastAPI 的 async def 路由函数只在事件循环中“不阻塞 I/O”,但 requests 是同步阻塞式 HTTP 客户端,一调用就停住整个协程线程,其他请求全得排队等它返回。
常见错误现象:接口响应时间忽高忽低,压测时并发上不去,uvicorn 日志里看不到并发请求日志,像单线程在跑。
- 换成异步 HTTP 客户端:
httpx.AsyncClient(推荐)或aiohttp - 如果必须用
requests,得用loop.run_in_executor包一层,丢给线程池执行 -
httpx默认支持 HTTP/2 和连接复用,比requests在高并发下更稳
import httpx
@app.get("/fetch")
async def fetch_data():
async with httpx.AsyncClient() as client:
resp = await client.get("https://api.example.com/data")
return resp.json()
CPU 密集任务写在 async def 里没用
比如做图像缩放、JSON 大文件解析、加密解密、正则全文匹配——这些根本不是 I/O,而是纯 CPU 运算,async 不会加速,反而因协程调度增加开销。
使用场景:你有个 process_large_csv() 函数,输入是文件路径,输出是处理后的字典列表,但它内部用 pandas.read_csv + .apply() 做大量计算。
- 别在
async def里直接调用,哪怕加了await也没意义 - 用
asyncio.to_thread()(Python 3.9+)或loop.run_in_executor(None, ...)拆出去 - 注意:频繁小任务用线程池反而有上下文切换成本,大任务才值得拆
import asyncio
@app.post("/analyze")
async def analyze_text(data: dict):
result = await asyncio.to_thread(process_heavy_nlp, data["text"])
return {"result": result}
async def 路由里混用 time.sleep() 或 sqlite3.connect()
这两个是典型“看着像 I/O,实则完全阻塞”的坑。time.sleep() 是纯同步休眠;sqlite3 默认也是同步磁盘操作,即使开 isolation_level=None 也挡不住锁和写入阻塞。
错误现象:一个请求 sleep 2 秒,其他所有请求都得等;多个请求同时写 sqlite,出现 database is locked 错误且响应超时。
-
time.sleep()必须换await asyncio.sleep() - SQLite 不适合高并发写,要么加 WAL 模式 + 连接池(
aiosqlite),要么切到异步数据库如asyncpg(PostgreSQL) - 如果只是读配置、查缓存,可以用
threading.local()或内存 dict +asyncio.Lock()控制访问
你以为加了 async 就自动并发了?
async 不等于并行,只是协作式并发。如果你写成串行 await a(); await b(); await c();,那三件事还是依次执行,总耗时 = a+b+c。
真正要提速,得显式并发:asyncio.gather() 或 asyncio.create_task() 启动多个协程,让它们“一起跑”。
-
gather()等全部完成,适合结果要一起返回的场景 -
create_task()更灵活,可中途取消、检查状态、按需 await - 注意:并发数太高可能触发目标服务限流,建议加
asyncio.Semaphore控制并发量
容易被忽略的一点:所有并发任务必须都是真正的异步函数(返回 Awaitable),混进一个同步调用,整组就退化成串行。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











