使用 async 進行並行工作

FastAPI 入門

Matt Eckerle

Software and Data Engineering Leader

為何用 async?並行做漢堡!

逐步做漢堡

排隊顧客,漢堡以序列方式製作與出餐

並行做漢堡

排隊顧客,漢堡以並行方式製作與出餐

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

實務中的 async

逐步做漢堡

定義取得漢堡的函式

# This is not asynchronous
def get_sequential_burgers(number: int):
    # Do some sequential stuff
    return burgers

以序列方式呼叫函式

burgers = get_burgers(2)

並行做漢堡

定義取得漢堡的函式

async def get_burgers(number: int):
    # Do some asynchronous stuff
    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 入門

一起來練習吧!

FastAPI 入門

Preparing Video For Download...