成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FastAPI 項目啟動/關閉事件實戰:數據庫連接、緩存預熱、模型加載一站式搞定!

數據庫
FastAPI 原生就支持啟動與關閉事件機制(startup/shutdown),而且使用起來異常優雅!

在生產環境中,我們經常會遇到這樣的需求:

  • 項目啟動時,需要連接數據庫、加載機器學習模型或預熱緩存
  • 項目關閉時,需要優雅釋放連接、清理資源,確保不會“僵尸占用”

好消息是: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("應用關閉,釋放資源...")

方法二:使用 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)

二、實戰應用場景演示

我們將模擬如下生命周期管理需求:

場景

操作

啟動時

連接數據庫、預熱緩存、加載模型

關閉時

關閉數據庫連接、清空緩存

示例結構:

project/
├── main.py
├── utils/
│   ├── database.py
│   ├── cache.py
│   └── model_loader.py

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()

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()

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 = None

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 生命周期!"}

三、啟動效果(控制臺日志)

啟動應用后你會看到類似輸出:

?? 正在連接數據庫...
? 預熱緩存中...
?? 加載機器學習模型...

關閉應用時:

? 正在關閉數據庫連接...
?? 清理緩存...
?? 卸載模型...

四、總結

FastAPI 的生命周期事件非常適合處理啟動初始化與資源釋放的場景:

  • lifespan() 是更現代、推薦的方式
  • 支持 異步資源初始化,天然適配 async 框架
  • 非常適合用于加載模型、連接 Redis、數據庫、Kafka、RabbitMQ 等
責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2021-07-27 16:02:40

云原生數據庫阿里云

2024-08-19 09:05:00

Seata分布式事務

2022-12-02 17:46:44

開源百度飛槳

2009-07-30 21:16:29

布線服務電纜架設

2017-05-04 21:30:32

前端異常監控捕獲方案

2022-09-16 11:27:46

建設微服務

2009-10-23 09:42:24

2022-12-23 09:04:33

字節跳動數據治理架構

2023-10-26 06:59:58

FinOps云原生

2025-04-16 08:00:00

FastAPIJWT用戶認證

2021-09-30 15:28:29

阿里云數據庫云原生

2012-04-09 17:36:38

華為智真

2013-10-24 17:35:01

云網絡H3C電子政務

2009-07-27 11:37:04

網絡拓撲摩卡

2021-12-07 10:04:34

Azure Kuber場景應用

2018-10-15 15:07:18

2018-10-16 15:11:28

2014-01-13 09:00:54

PythonDjango
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级黄色日本片 | 亚洲3p| 免费看91 | 亚洲精品一区二三区不卡 | 久久国产精品视频 | 99精品观看 | 国产一区二区三区 | 中文字幕在线观看日韩 | 亚洲视频观看 | 欧美a级成人淫片免费看 | 国产一区二区三区四区区 | 一区二区福利视频 | 久久精品国产99国产精品 | 免费三级网站 | 精品亚洲国产成av人片传媒 | 久久久久久成人 | 黄色片大全在线观看 | 国产电影一区 | 日韩欧美精品在线 | 香蕉婷婷 | 手机在线观看 | 欧美群妇大交群中文字幕 | 97精品超碰一区二区三区 | 国产精品久久久久av | 亚洲免费久久久 | 日本视频中文字幕 | 99色视频| 91欧美精品成人综合在线观看 | 午夜影院免费体验区 | 欧美在线a| 永久免费在线观看 | www.色婷婷| 色综合天天天天做夜夜夜夜做 | 日本欧美黄色片 | 精品一区二区在线观看 | 亚洲欧美中文日韩在线v日本 | 欧美一区久久 | 天堂成人av| 欧美日韩成人影院 | 日韩成人在线视频 | 久久一区二区精品 |