Use taskiq

This commit is contained in:
2023-05-20 20:16:00 +02:00
parent 67478536e2
commit 7f6837b8f5
11 changed files with 241 additions and 211 deletions

View File

@@ -1,38 +1,46 @@
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.responses import ORJSONResponse
from prometheus_fastapi_instrumentator import Instrumentator
from redis.asyncio import ConnectionPool
from app.views import healthcheck_router, router
from core.arq_pool import get_arq_pool
from core.config import REDIS_URL
from core.db import database
from core.redis_client import get_client
import core.sentry # noqa: F401
from core.taskiq_worker import broker
@asynccontextmanager
async def lifespan(app: FastAPI):
database = app.state.database
if not database.is_connected:
await database.connect()
if not broker.is_worker_process:
await broker.startup()
yield
if database.is_connected:
await database.disconnect()
if not broker.is_worker_process:
await broker.shutdown()
await app.state.redis_pool.disconnect()
def start_app() -> FastAPI:
app = FastAPI(default_response_class=ORJSONResponse)
app = FastAPI(default_response_class=ORJSONResponse, lifespan=lifespan)
app.state.database = database
app.state.redis_pool = ConnectionPool.from_url(REDIS_URL)
app.include_router(router)
app.include_router(healthcheck_router)
@app.on_event("startup")
async def startup() -> None:
database_ = app.state.database
if not database_.is_connected:
await database_.connect()
app.state.arq_pool = await get_arq_pool()
app.state.redis_client = get_client()
@app.on_event("shutdown")
async def shutdown() -> None:
database_ = app.state.database
if database_.is_connected:
await database_.disconnect()
Instrumentator(
should_ignore_untemplated=True,
excluded_handlers=["/docs", "/metrics", "/healthcheck"],