什麼是 Lifespan?
Lifespan 是 FastAPI 管理應用程式「啟動」與「關閉」邏輯的機制,讓你能在伺服器啟動時執行初始化工作(例如建立資料庫連線池),並在伺服器關閉時執行清理工作(例如關閉連線、釋放資源)。
Lifespan 基礎語法
- 從
contextlib匯入asynccontextmanager,並用它裝飾一個async def函式。 - yield 之前的程式碼為啟動邏輯(伺服器開始接受請求前執行),yield 之後的程式碼為關閉邏輯(伺服器停止後執行)。
- 將此函式傳入
FastAPI(lifespan=函式名稱)參數即可掛載,不需要加括號呼叫。 - 可透過
app.state儲存啟動時建立的共享資源(例如連線池),路由中透過request.app.state.屬性名存取。
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
class FakeDBPool:
def __init__(self):
print("連線池已建立")
def close(self):
print("連線池已關閉")
@asynccontextmanager
async def lifespan(app: FastAPI):
# --- 啟動邏輯 ---
pool = FakeDBPool()
app.state.db_pool = pool # 掛載至 app.state 供路由存取
yield # 應用程式運行中
# --- 關閉邏輯 ---
pool.close()
app = FastAPI(lifespan=lifespan)
@app.get("/")
def read_root(request: Request):
pool = request.app.state.db_pool
return {"db_pool_type": type(pool).__name__}

















