FastAPI 官方对 async 的建议非常实用:
- 如果你调用的库要
await,那就用async def - 如果你调用的是传统阻塞库,没有
await,那就用普通def def和async def可以混用
@app.get("/async-report")
async def async_report():
result = await some_async_http_client.get("/remote-service")
return {"remote": result.json()}
@app.get("/sync-report")
def sync_report():
data = some_blocking_library.read_legacy_file()
return {"size": len(data)}不要把 async 神化成永远更快。 它更准确的意义是:更适合等待型 I/O 任务的并发调度。