您的当前位置:首页 >IT科技类资讯 >FastAPI 项目启动/关闭事件实战:数据库连接、缓存预热、模型加载一站式搞定! 正文
时间:2025-11-04 08:25:29 来源:网络整理编辑:IT科技类资讯
在生产环境中,我们经常会遇到这样的需求:项目启动时,需要连接数据库、加载机器学习模型或预热缓存项目关闭时,需要优雅释放连接、清理资源,确保不会“僵尸占用”好消息是:FastAPI 原生就支持启动与关闭
在生产环境中,目启模型我们经常会遇到这样的动关需求:
项目启动时,需要连接数据库、闭事加载机器学习模型或预热缓存项目关闭时,实据库加载需要优雅释放连接、战数站式清理资源,连接确保不会“僵尸占用”好消息是缓存: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 的服务器租用生命周期事件非常适合处理启动初始化与资源释放的场景:
lifespan() 是更现代、推荐的方式支持 异步资源初始化,天然适配 async 框架非常适合用于加载模型、连接 Redis、数据库、Kafka、RabbitMQ 等解决电脑开CF弹窗删除错误的有效方法(快速清除电脑中的CF弹窗错误,提升游戏体验)2025-11-04 08:20
Flowable 流程部署与删除2025-11-04 08:10
优化你的DiscuzNT,让它跑起来2025-11-04 08:05
域控制器迁移的方法2025-11-04 07:29
福克斯特电脑使用教程(轻松掌握福克斯特电脑操作技巧)2025-11-04 07:22
详解iostat -dx 1命令监控IO性能2025-11-04 07:01
浅析Mongodb源码之游标Cursor2025-11-04 06:33
PingCAP 的客户成功新范式:自主开源+持续引领+面向未来2025-11-04 05:58
电脑显示程序出现未知错误(解决电脑显示程序错误的有效方法)2025-11-04 05:48
将域用户或域组加入本地组的脚本2025-11-04 05:45
华为Watch智能手表的功能与体验(探究华为Watch智能手表的特色功能和用户体验)2025-11-04 08:19
AI技术将对网络安全带来哪些影响?2025-11-04 08:15
Visual C++中用MFC ODBC操作Access数据库2025-11-04 07:55
一个数据库故障的表象与机理,你明白了吗?2025-11-04 07:32
打造网红电脑钟表的制作教程(用创意与技术,打造属于自己的网红电脑钟表)2025-11-04 07:29
SQL点滴之性能优化其实没有那么神秘2025-11-04 07:00
系统性能排查方略及工商银行MySQL性能管控2025-11-04 06:58
分库分表实战之订单业务完整梳理2025-11-04 06:46
《牧场物语电脑操作教程——让你成为农场达人》(从零基础到游戏高手,掌握关键技巧!)2025-11-04 05:54
分区如何在分片数据库系统中提高性能2025-11-04 05:43