在前面的 Django 和 FastAPI 章節中曾提到過 ASGI,它的全名是 Asynchronous Server Gateway Interface,是 WSGI(Web Server Gateway Interface)的進階版,主要新增了對非同步處理(Asynchronous)的支援與擴充。
在同步機制下,程式的任務是按順序執行的,必須等到前一個任務完成後,才會繼續執行下一個任務。如果某個任務需要花費大量時間,例如從硬碟中的資料庫取出資料,那麼後續的任務就會被阻塞,直到當前任務完成,這可能會造成效能瓶頸。
相反,非同步機制允許程式在不等待某個操作完成的情況下繼續執行其他任務。當一個非同步操作開始後,程式不會停下來等待結果,而是繼續處理其他操作,最終由額外的機制將操作結果回傳。因此,在 Web Application,當程式等待資料庫查詢結果時,仍然可以執行其他任務,有效避免了資源的浪費,使非同步成為一個更高效的選擇。
在前文中,已經介紹過知名的 WSGI 伺服器——Gunicorn。而在本篇探討的 ASGI 中,最知名的伺服器則是 Uvicorn。接下來,我將透過範例來進一步介紹 Uvicorn 的使用方式。
當開發者在前一篇文章中安裝了 fastapi[standard]
時,Uvicorn 也會隨之安裝,因此不需要額外手動安裝。
接下來,使用 Uvicorn 作為 ASGI 伺服器來運行先前建立的 FastAPI Web 應用程式。只需在專案目錄下執行以下指令即可啟動應用程式:
poetry run uvicorn main:app
這裡的 main:app
指的是專案中的 main.py
檔案裡的 app 物件。啟動後,開發者只需在瀏覽器中輸入 http://127.0.0.1:8000/docs
,即可看到自動生成的文檔。