使用 async 进行并发处理

FastAPI 入门

Matt Eckerle

Software and Data Engineering Leader

为何使用 async?并发汉堡!

顺序制作汉堡

顾客排队,汉堡按顺序制作与出餐

并发制作汉堡

顾客排队,汉堡并发制作与出餐

1 https://fastapi.tiangolo.com/async/
FastAPI 入门

实践中的 async

顺序制作汉堡

定义获取汉堡的函数

# 这不是异步的
def get_sequential_burgers(number: int):
    # 执行一些顺序操作
    return burgers

按顺序调用函数

burgers = get_burgers(2)

并发制作汉堡

定义获取汉堡的函数

async def get_burgers(number: int):
    # 执行一些异步操作
    return burgers

以异步方式调用函数

burgers = await get_burgers(2)
FastAPI 入门

在 FastAPI 中使用 async

如果可以:

results = await some_library()

则使用 async def

@app.get('/')
async def read_results():
    results = await some_library()
    return results

注意 仅在由 async def 定义的函数内使用 await

FastAPI 入门

何时使用 async

何时使用 async

当应用需等待外部系统响应时

  • 外部 API
  • 数据库

示例

  • HTTP 请求
  • 查询数据库
  • 读取文件

何时不使用 async

CPU 密集型任务

示例

  • 音频或图像处理
  • 计算机视觉
  • 机器学习
  • 深度学习

如果不确定

FastAPI 入门

Passons à la pratique !

FastAPI 入门

Preparing Video For Download...