lifespan
Описание
Lifespan — это менеджер жизненного цикла фоновых задач в Rapidy
.
Он управляет задачами, которые должны быть запущены до или после старта сервера, либо выполняться постоянно.
on_startup
on_startup — это задачи, которые запускаются в цикле событий сразу после старта приложения вместе с обработчиком запросов.
Обработчики on_startup
должны иметь следующую сигнатуру.
from rapidy import Rapidy
def startup() -> None:
print('startup')
rapidy = Rapidy(on_startup=[startup])
from rapidy import Rapidy
def startup(rapidy: Rapidy) -> None:
print(f'startup, application: {app}')
rapidy = Rapidy(on_startup=[startup])
from rapidy import Rapidy
async def async_startup() -> None:
print('async_startup')
rapidy = Rapidy(on_startup=[async_startup])
from rapidy import Rapidy
async def async_startup(rapidy: Rapidy) -> None:
print(f'async_startup, application: {app}')
rapidy = Rapidy(on_startup=[async_startup])
Если у обработчика есть атрибуты, первым всегда будет передаваться текущий экземпляр Rapidy
.
Добавление обработчиков в уже созданный объект Rapidy
.
on_shutdown
on_shutdown — это задачи, выполняемые после остановки сервера.
Этот механизм можно использовать для корректного завершения долгоживущих соединений, таких как веб-сокеты или потоковая передача данных.
Обработчики on_shutdown
должны иметь следующую сигнатуру.
from rapidy import Rapidy
def shutdown() -> None:
print('shutdown')
rapidy = Rapidy(on_shutdown=[shutdown])
from rapidy import Rapidy
def shutdown(rapidy: Rapidy) -> None:
print(f'shutdown, application: {rapidy}')
rapidy = Rapidy(on_shutdown=[shutdown])
from rapidy import Rapidy
async def async_shutdown() -> None:
print('async_shutdown')
rapidy = Rapidy(on_shutdown=[async_shutdown])
from rapidy import Rapidy
async def async_shutdown(rapidy: Rapidy) -> None:
print(f'async_shutdown, application: {rapidy}')
rapidy = Rapidy(on_shutdown=[async_shutdown])
Если у обработчика есть атрибуты, первым всегда будет передаваться текущий экземпляр Application
.
Добавление обработчиков в уже созданный объект Application
.
on_cleanup
on_cleanup — это задачи, запускаемые после остановки сервера и выполнения всех on_shutdown
обработчиков.
Этот сигнал можно использовать, например, для корректного закрытия соединений с базой данных.
Обработчики on_cleanup
должны иметь следующую сигнатуру.
from rapidy import Rapidy
def cleanup() -> None:
print('cleanup')
rapidy = Rapidy(on_cleanup=[cleanup])
from rapidy import Rapidy
def cleanup(rapidy: Rapidy) -> None:
print(f'cleanup, application: {rapidy}')
rapidy = Rapidy(on_cleanup=[cleanup])
from rapidy import Rapidy
async def async_cleanup() -> None:
print('async_cleanup')
rapidy = Rapidy(on_cleanup=[async_cleanup])
from rapidy import Rapidy
async def async_cleanup(rapidy: Rapidy) -> None:
print(f'async_cleanup, application: {rapidy}')
rapidy = Rapidy(on_cleanup=[async_cleanup])
Если у обработчика есть атрибуты, первым всегда будет передаваться текущий экземпляр Application
.
Добавление обработчиков в уже созданный объект Application
.
Сигналы on_cleanup
выполняются последними.
lifespan
lifespan отвечает за управление фоновыми задачами.
Этот механизм полезен при работе с долгоживущими задачами или в случаях, когда необходимо поддерживать определённый объект контекста, например соединения.
Обработчики lifespan
должны иметь следующую сигнатуру.
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from rapidy import Rapidy
@asynccontextmanager
async def bg_task() -> AsyncGenerator[None, None]:
try:
print('starting background task')
yield
finally:
print('finishing background task')
rapidy = Rapidy(
lifespan=[bg_task()],
)
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from rapidy import Rapidy
@asynccontextmanager
async def bg_task_with_app(rapidy: Rapidy) -> AsyncGenerator[None, None]:
try:
print('starting background task')
yield
finally:
print('finishing background task')
rapidy = Rapidy(
lifespan=[bg_task_with_app],
)
Добавление обработчиков в уже созданный объект Application
.
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from rapidy import Rapidy
@asynccontextmanager
async def bg_task() -> AsyncGenerator[None, None]:
try:
print('starting background task')
yield
finally:
print('finishing background task')
rapidy = Rapidy()
rapidy.lifespan.append(bg_task())
Задачи lifespan
завершаются перед выполнением обработчиков on_cleanup
.