Files
YG_FT/backend/app/workers/compute_poller.py

34 lines
1.3 KiB
Python
Raw Normal View History

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":
2026-08-21 09:42:03 +08:00
logger.info("计算轮询已禁用", extra={"compute_mode": settings.compute_mode})
return
interval = max(3, settings.compute_poll_interval_seconds)
2026-08-21 09:42:03 +08:00
logger.info("计算轮询已启动", extra={"interval_seconds": interval})
while True:
try:
result = await poll_compute_jobs_once()
if result["failed"]:
2026-08-21 09:42:03 +08:00
logger.warning("计算轮询检测到失败任务", extra={"result": result})
elif result["synced"]:
2026-08-21 09:42:03 +08:00
logger.debug("计算任务状态已同步", extra={"result": result})
except asyncio.CancelledError:
2026-08-21 09:42:03 +08:00
logger.info("计算轮询已停止")
raise
except Exception as exc: # noqa: BLE001 - keep background polling alive
2026-08-21 09:42:03 +08:00
logger.exception("计算轮询执行失败", extra={"error": str(exc)})
await asyncio.sleep(interval)