import asyncio from contextlib import asynccontextmanager, suppress from fastapi import FastAPI from routes import routers from services.notifications import run_subscription_notifications from services.rw_sync import run_rw_sync_reconciler, run_rw_sync_worker @asynccontextmanager async def lifespan(_: FastAPI): tasks = [ asyncio.create_task(run_subscription_notifications()), asyncio.create_task(run_rw_sync_worker()), asyncio.create_task(run_rw_sync_reconciler()), ] try: yield finally: for task in tasks: task.cancel() for task in tasks: with suppress(asyncio.CancelledError): await task app = FastAPI(debug=True, lifespan=lifespan) for r in routers: app.include_router(r)