Вопрос проверяет понимание механизма управления жизненным циклом приложения в FastAPI, который позволяет выполнять код при запуске и завершении работы сервера.
Lifespan — это современный способ управления жизненным циклом FastAPI-приложения, который заменил устаревшие события startup и shutdown. Он позволяет выполнять асинхронный код при старте сервера и его завершении, используя конструкцию async with.
Вы определяете асинхронную функцию-генератор, которая использует yield. Код до yield выполняется при запуске, а после yield — при завершении. Через yield можно передать словарь с данными, которые будут доступны в приложении через request.state или app.state.
from contextlib import asynccontextmanager
from fastapi import FastAPI
@asynccontextmanager
async def lifespan(app: FastAPI):
# Код при запуске
print("Starting up...")
db_connection = await connect_to_db()
yield {"db": db_connection}
# Код при завершении
print("Shutting down...")
await db_connection.close()
app = FastAPI(lifespan=lifespan)
@app.get("/")
async def read_root():
return {"message": "Hello"}Вывод: lifespan рекомендуется использовать для всех новых проектов на FastAPI, так как он обеспечивает чистый и предсказуемый жизненный цикл, избегая проблем с глобальными переменными и утечками ресурсов.