"""实时统计广播后台任务""" import asyncio from fastapi import FastAPI from app.core.config import settings from app.core.log import logger from app.services.dashboard_stats import get_dashboard_stats async def stats_broadcaster_loop(app: FastAPI) -> None: manager = app.state.ws_manager interval = settings.ws_stats_interval_seconds while True: try: await asyncio.sleep(interval) if manager.connection_count == 0: continue scheduler = app.state.scheduler stats = await get_dashboard_stats(scheduler.running) await manager.broadcast_json({"type": "stats", "data": stats}) except asyncio.CancelledError: break except Exception: logger.exception("stats broadcaster tick failed")