FastAPI 該用 async def 還是 def?

前言 FastAPI 是近幾年繼 Flask 之後更火紅的 Python web server,不僅能自動生成 OpenAPI-Swagger 的 API 文件,也增加了類似 Node.js 的 Async 異步機制,大幅的提升效能.儼然已成為 Python 開 API 的不二人選.但使用上有踩到 def 與 async def 的陷阱,所以有了這篇文章來解釋遇到的問題 Concurrency vs Parallelism 開始以前先複習一下,這兩個名詞是不等價的,描述的是不同的併發狀況 Concurrency 單一時間點,單一 worker 一次只做一件事情,但會交錯切換來完成任務,旨在快速處理任務 ex: 一個廚師同時切換工作項目來料理,如: 切菜, 煮飯, 燒水 多以 Thread 或 Async IO 來達成,因為 IO bound 的 task 更適合,例如: network 的連線等待或 file 的讀取 Parallelism 單一時間點,有多個 worker 會同時做多件事情,所以並行的執行任務,旨在處理更多的任務 ex: 銀行櫃檯有多個窗口,並行的處理任務 多以 Multiple Process 來達成,因為 CPU bound 的 task 更適合,例如: 大量耗時的 Machine Learning 矩陣計算 圖片來源: Async IO in Python: A Complete Walkthrough – Real Python...

<span title='2023-03-28 19:49:13 +0800 +0800'>March 28, 2023</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;651 words&nbsp;·&nbsp;Madi