← Back to Tutorials

30. Event Handlers

Startup & Shutdown (Legacy)

from fastapi import FastAPI

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    print("Starting up...")
    # Initialize DB connection
    # Load ML model
    # Create connection pool

@app.on_event("shutdown")
async def shutdown_event():
    print("Shutting down...")
    # Close DB connections
    # Clean up resources

Lifespan (Modern)

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Startup
    print("Server starting...")
    app.state.db = await create_db_pool()
    app.state.ml_model = load_model()
    yield
    # Shutdown
    print("Server shutting down...")
    await app.state.db.close()

app = FastAPI(lifespan=lifespan)

@app.get("/predict/")
async def predict(text: str):
    result = app.state.ml_model.predict(text)
    return {"prediction": result}

Use Cases

✏️ Exercise: Use the lifespan pattern to initialize a database connection pool on startup and close it on shutdown. Use app.state to store the pool.