РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
55 of 307 menu

Событие lifespan

Событие lifespan применяется к приложению FastAPI и позволяет выполнить код до запуска и после остановки приложения. Оно передаётся в параметр lifespan конструктора класса FastAPI в виде асинхронного контекстного менеджера. Внутри него до оператора yield выполняется код запуска, а после yield - код остановки.

Синтаксис

from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): # код при запуске yield # код при остановке app = FastAPI(lifespan=lifespan)

Пример

Давайте выполним код при запуске и остановке приложения:

from contextlib import asynccontextmanager from fastapi import FastAPI @asynccontextmanager async def lifespan(app: FastAPI): print('startup') yield print('shutdown') app = FastAPI(lifespan=lifespan) @app.get('/') def index(): return {'text': 'hello'}

Результат выполнения кода при запуске сервера:

uvicorn main:app --reload

В консоли появится сообщение:

"startup"

Пример

Давайте сохраним подключение к базе данных в состоянии приложения app.state:

<+python+> from contextlib import asynccontextmanager from fastapi import FastAPI @asynccontextmanager async def lifespan(app: FastAPI): app.state.db = {'connected': True} yield app.state.db = None app = FastAPI(lifespan=lifespan) @app.get('/') def index(): return app.state.db <-python+>

Результат выполнения кода для адреса '/':

{"connected": true}

Пример

Давайте выполним асинхронную инициализацию ресурса при запуске приложения:

import asyncio from contextlib import asynccontextmanager from fastapi import FastAPI async def connect_db(): await asyncio.sleep(1) return {'status': 'ready'} @asynccontextmanager async def lifespan(app: FastAPI): app.state.db = await connect_db() yield app.state.db = None app = FastAPI(lifespan=lifespan) @app.get('/') def index(): return app.state.db

Результат выполнения кода для адреса '/':

{"status": "ready"}

Смотрите также

  • параметр lifespan,
    который передаёт контекстный менеджер в приложение
  • событие startup,
    которое выполняется при запуске приложения
  • событие shutdown,
    которое выполняется при остановке приложения
  • метод on_event,
    который вешает обработчик на событие приложения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить