一、问题背景

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": "数据已接收,正在处理中"}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐