当前位置: 当前位置:首页 >数据库 >FastAPI 项目启动/关闭事件实战:数据库连接、缓存预热、模型加载一站式搞定! 正文

FastAPI 项目启动/关闭事件实战:数据库连接、缓存预热、模型加载一站式搞定!

2025-11-04 23:43:51 来源:多维IT资讯作者:域名 点击:747次

在生产环境中,目启模型我们经常会遇到这样的动关需求:

项目启动时,需要连接数据库、闭事加载机器学习模型或预热缓存项目关闭时,实据库加载需要优雅释放连接、战数站式清理资源,连接确保不会“僵尸占用”

好消息是缓存:FastAPI 原生就支持启动与关闭事件机制(startup/shutdown),而且使用起来异常优雅!预热

一、搞定什么是香港云服务器目启模型生命周期事件?

FastAPI 提供两种方式注册生命周期事件:

方法一:使用 @app.on_event() 装饰器(经典方式)

复制from fastapi import FastAPI app = FastAPI() @app.on_event("startup") async def startup_event(): print("应用启动,初始化资源...") @app.on_event("shutdown") async def shutdown_event(): print("应用关闭,动关释放资源...")1.2.3.4.5.6.7.8.9.10.11.

方法二:使用 lifespan() 上下文函数(推荐方式)

FastAPI 1.0 后推荐使用 lifespan 函数进行统一管理,闭事功能更清晰:

复制from fastapi import FastAPI from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): print("✅ 应用启动 - startup") # 初始化资源 yield print("🧹 应用关闭 - shutdown") # 清理资源 app = FastAPI(lifespan=lifespan)1.2.3.4.5.6.7.8.9.10.11.12. 二、实据库加载实战应用场景演示

我们将模拟如下生命周期管理需求:

场景

操作

启动时

连接数据库、战数站式预热缓存、连接加载模型

关闭时

关闭数据库连接、清空缓存

示例结构:

复制project/ ├── main.py ├── utils/ │ ├── database.py │ ├── cache.py │ └── model_loader.py1.2.3.4.5.6.

1. 模拟数据库连接模块:database.py

复制# utils/database.py class DBClient: def __init__(self): self.connected = False async def connect(self): print("🔌 正在连接数据库...") self.connected = True async def disconnect(self): print("❌ 正在关闭数据库连接...") self.connected = False db_client = DBClient()1.2.3.4.5.6.7.8.9.10.11.12.13.14.

2. 模拟缓存模块:cache.py

复制# utils/cache.py cache = {} async def preload_cache(): print("⚡ 预热缓存中...") cache["hot_data"] = [1, 2, 3, 4] async def clear_cache(): print("🧹 清理缓存...") cache.clear()1.2.3.4.5.6.7.8.9.10.

3. 模拟模型加载模块:model_loader.py

复制# utils/model_loader.py model = None async def load_model(): global model print("🤖 加载机器学习模型...") model = "MyModel" async def unload_model(): global model print("🧼 卸载模型...") model = None1.2.3.4.5.6.7.8.9.10.11.12.

4. 项目入口:main.py

复制from fastapi import FastAPI from contextlib import asynccontextmanager from utils.database import db_client from utils.cache import preload_cache, clear_cache from utils.model_loader import load_model, unload_model @asynccontextmanager async def lifespan(app: FastAPI): # 应用启动 await db_client.connect() await preload_cache() await load_model() yield # 应用关闭 await db_client.disconnect() await clear_cache() await unload_model() app = FastAPI(lifespan=lifespan) @app.get("/") async def root(): return {"message": "Hello, FastAPI 生命周期!"}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24. 三、启动效果(控制台日志)

启动应用后你会看到类似输出:

复制🔌 正在连接数据库... ⚡ 预热缓存中... 🤖 加载机器学习模型...1.2.3.

关闭应用时:

复制❌ 正在关闭数据库连接... 🧹 清理缓存... 🧼 卸载模型...1.2.3. 四、总结

FastAPI 的WordPress模板生命周期事件非常适合处理启动初始化与资源释放的场景:

lifespan() 是更现代、推荐的方式支持 异步资源初始化,天然适配 async 框架非常适合用于加载模型、连接 Redis、数据库、Kafka、RabbitMQ 等
作者:系统运维
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜