from __future__ import annotations import asyncio import logging from backend.features.screener.service import ScreenerError, ScreenerService logger = logging.getLogger(__name__) async def run_screener_scheduler(service: ScreenerService, stop: asyncio.Event) -> None: while not stop.is_set(): try: result = await asyncio.to_thread(service.run_after_close) if result: logger.info( "Screener after-close run completed", extra={"event": "screener.completed", "context": result}, ) except ScreenerError as exc: logger.info( "Screener is waiting for complete market data", extra={"event": "screener.waiting", "context": {"reason": str(exc)}}, ) except Exception: logger.exception( "Screener scheduler failed", extra={"event": "screener.failed"}, ) try: await asyncio.wait_for(stop.wait(), timeout=300) except TimeoutError: pass