Files
xiaobaifupan/next/backend/jobs/screener.py
T

34 lines
1.1 KiB
Python

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