真实服务总有一些动作应该发生在:
- 启动前
- 关闭前
FastAPI 现在官方推荐的方式是 lifespan。
from contextlib import asynccontextmanager
from fastapi import FastAPI
runtime = {}
@asynccontextmanager
async def lifespan(app: FastAPI):
runtime["service_name"] = "软件城市政务大厅"
print("大厅开门,初始化完成")
yield
runtime.clear()
print("大厅闭馆,资源已释放")
app = FastAPI(lifespan=lifespan)开馆前
├── 建立数据库连接
├── 初始化模型
├── 创建共享客户端
└── 加载配置
闭馆后
├── 关闭连接
├── 清理资源
└── 写入收尾日志