如何解决fastapi的告警:类“FastAPI”中的“on_event”方法已弃用

570 阅读1分钟

背景

  • 今天启动fastapi时发现了告警,在 FastAPI 中,on_event 方法已被弃用,官方推荐使用 生命周期事件处理器(lifespan event handlers)  来替代。这是 FastAPI 为了更好地支持异步上下文管理和更灵活的生命周期控制而做出的调整。
  • 虽然不知道替换成新写法后性能提升了多少,但我还是按照官方建议进行了修正。希望不会带来副作用。

优化之前

@app.on_event("startup")
async def startup():
    await database.connect()

@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()

优化之后

from fastapi import FastAPI
from contextlib import asynccontextmanager

# 假设这是你的数据库对象
# 例如:database = Database(...)

@asynccontextmanager
async def lifespan(app: FastAPI):
    # 应用启动时连接数据库(替代原来的startup事件)
    await database.connect()
    print("数据库已连接")
    
    yield  # 应用运行期间会停留在这一步
    
    # 应用关闭时断开数据库连接(替代原来的shutdown事件)
    await database.disconnect()
    print("数据库已断开连接")

# 创建FastAPI实例时绑定生命周期函数
app = FastAPI(lifespan=lifespan)

# 你的路由定义...
@app.get("/")
async def root():
    return {"message": "Hello World"}