rebuild(stage-9): deliver deterministic intelligent screening

This commit is contained in:
leefer
2026-07-30 05:15:17 +08:00
parent 6cb52e864a
commit 158257ebb8
46 changed files with 7322 additions and 34 deletions
+33
View File
@@ -0,0 +1,33 @@
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