FastApi使用asyncio.gather并发运行多个异步函数

from fastapi import FastAPI
import asyncio

app = FastAPI()

async def task_one(id: int):
  # 模拟耗时操作,例如数据库查询
  await asyncio.sleep(1)
  return {"message": f"任务一完成,ID: {id}"}

async def task_two(id: int):
  # 模拟耗时操作,例如调用外部 API
  await asyncio.sleep(2)
  return {"message": f"任务二完成,ID: {id}"}

@app.get("/run_tasks/{task_id}")
async def run_tasks(task_id: int):
  # 并发运行 task_one 和 task_two
  results = await asyncio.gather(
    task_one(task_id), 
    task_two(task_id)
  )

  # 将结果合并成一个字典
  return {
    "task_one": results[0],
    "task_two": results[1]
  }

解释:

  1. 导入库: 首先,我们导入了 fastapiasyncio 库。
  2. 创建 FastAPI 应用: 我们创建了一个 FastAPI 应用实例。
  3. 定义异步函数: 我们定义了两个异步函数 task_onetask_two,它们模拟了一些耗时的异步操作,并接受一个 task_id 参数。
  4. 创建路由处理函数: 我们创建了一个 GET 路由 /run_tasks/{task_id},它接受一个路径参数 task_id
  5. 使用 asyncio.gather 并发执行任务: 在路由处理函数中,我们使用 asyncio.gather 并发运行 task_onetask_two,并将 task_id 传递给它们。
  6. 合并结果并返回: asyncio.gather 返回一个包含所有任务结果的列表,我们将其合并成一个字典并返回给客户端。

现在,您可以运行 FastAPI 应用,并访问 /run_tasks/1 类似的地址来触发并发任务执行。例如,访问 /run_tasks/1

2秒后将返回:

{
  "task_one": {"message": "任务一完成,ID: 1"},
  "task_two": {"message": "任务二完成,ID: 1"}
}

希望这个例子能帮助您理解如何在 FastAPI 中使用 asyncio.gather 并发运行多个异步函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值