【FastAPI】BackgroundTasks快速响应请求,异步计算结果
·
一、问题背景
fastapi提供了简洁的python API封装方法,可以快速的定义post和get等请求。但在使用中,api会内置一些计算或者查询方法,使得api请求时等待时间较长。算法与后端进行交互时,为了加快开发,往往会只请求一次,即后端发送数据给算法,算法计算完毕后将结果返回给后端,后端再给前端响应。这个过程使得前端一直在等待后端的响应,用户体验不佳。
二、思路
考虑下面的一个执行逻辑:
前端指令——>后端数据推送——>fastapi——>后端接收结果——>前端接收结果
可以将后端数据推送与后端接收结果进行接口拆分,即:
step1:前端指令——>后端数据推送——>fastapi收到数据——>后端确认数据已收到
step2:fastapi收到数据——>计算结果——>后端接收结果——>前端接收结果
三、代码
fastapi库中包含BackgroundTasks方法,可以将函数添加到后台任务,不阻塞主请求。
from fastapi import FastAPI, BackgroundTasks
import asyncio
app = FastAPI()
# 模拟一个耗时的计算任务
async def body(data: str):
await asyncio.sleep(3) # 模拟耗时操作,例如10秒
print(f"处理完成: {data}")
@app.post("/process/")
async def process_data(data: str, background_tasks: BackgroundTasks):
# 将耗时任务添加到后台任务中
background_tasks.add_task(body, data)
return {"message": "数据已接收,正在处理中"}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)