from __future__ import annotations import asyncio from app.core.config import get_settings from app.core.logging import get_logger from app.modules.compute_gateway.sync import poll_compute_jobs_once logger = get_logger(__name__) async def run_compute_poller() -> None: settings = get_settings() if settings.compute_mode == "simulator" or settings.compute_status_sync_mode != "polling": logger.info("计算轮询已禁用", extra={"compute_mode": settings.compute_mode}) return interval = max(3, settings.compute_poll_interval_seconds) logger.info("计算轮询已启动", extra={"interval_seconds": interval}) while True: try: result = await poll_compute_jobs_once() if result["failed"]: logger.warning("计算轮询检测到失败任务", extra={"result": result}) elif result["synced"]: logger.debug("计算任务状态已同步", extra={"result": result}) except asyncio.CancelledError: logger.info("计算轮询已停止") raise except Exception as exc: # noqa: BLE001 - keep background polling alive logger.exception("计算轮询执行失败", extra={"error": str(exc)}) await asyncio.sleep(interval)