You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI中实现数据库异步通信与并发任务执行?

解决FastAPI异步并行执行数据库操作的问题

无需Celery,FastAPI自带异步机制即可实现

你要的并行执行写入、读取数据库的操作,完全不需要引入Celery这类任务队列框架,直接用Python的asyncio配合FastAPI就能搞定。

具体实现方式

Python的asyncio.gather()可以让多个协程并行执行,把写入和读取操作放进这个方法里,它们就会同时运行,而非串行等待。

先写一个异步读取函数示例:

async def get_latest_summaries(limit: int = 5) -> list[TextSummary]:
    return await TextSummary.all().limit(limit)

然后在接口中并行执行两个异步任务:

from fastapi import FastAPI
import asyncio

app = FastAPI()

@app.post("/summaries")
async def create_summary(payload: SummaryPayloadSchema):
    # 定义两个异步任务
    write_task = post(payload)
    read_task = get_latest_summaries()
    
    # 等待两个任务同时完成
    summary_id, latest_summaries = await asyncio.gather(write_task, read_task)
    
    return {
        "created_summary_id": summary_id,
        "latest_summaries": latest_summaries
    }

这样数据库的写入和读取请求会同时发起,充分利用异步IO的优势,不会互相阻塞等待。

同一个端点异步获取其他记录,完全适用该方案

不管是在同一个端点里并行执行写入+读取,还是多个读取操作,只要都是异步函数,都可以用asyncio.gather()实现并行。需要注意:你的数据库驱动必须是异步版本(比如用asyncpg操作PostgreSQL、motor操作MongoDB),如果用同步驱动,就算用了asyncio也没法真正并行,反而会阻塞事件循环。

什么时候需要Celery?

只有当你要处理超长耗时任务(比如生成大文件、调用响应极慢的第三方接口),或者需要离线执行、定时执行任务时,才需要Celery这类任务队列。像你现在这种轻量数据库读写操作,FastAPI自身的异步机制完全够用。

内容的提问来源于stack exchange,提问作者Diego L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:05:20