feat: schedule periodic reports asynchronously

This commit is contained in:
2026-07-31 17:11:21 +08:00
parent a589a25bdc
commit 0008903e8d
21 changed files with 969 additions and 145 deletions

View File

@@ -12,6 +12,7 @@ from app.core.exception_handlers import register_exception_handlers
from app.core.observability import RequestObservabilityMiddleware, configure_logging
from app.services.secret_service import SecretService
from app.services.maintenance_service import MaintenanceService
from app.services.periodic_report_worker import PeriodicReportWorker
import asyncio
@@ -22,14 +23,17 @@ async def lifespan(app: FastAPI):
if settings.auto_create_tables:
create_tables()
maintenance_task = asyncio.create_task(MaintenanceService.run_forever())
periodic_report_task = asyncio.create_task(PeriodicReportWorker.run_forever())
try:
yield
finally:
maintenance_task.cancel()
try:
await maintenance_task
except asyncio.CancelledError:
pass
for task in (maintenance_task, periodic_report_task):
task.cancel()
for task in (maintenance_task, periodic_report_task):
try:
await task
except asyncio.CancelledError:
pass
settings = get_settings()