Files

54 lines
1.4 KiB
Python
Raw Permalink Normal View History

2026-06-14 04:23:15 +08:00
"""Standalone cache warmer process for production aggregate payloads."""
from __future__ import annotations
import signal
import threading
from types import FrameType
from typing import Optional
from loguru import logger
from web.cache_warmer_service import (
build_default_cache_warmer,
warmer_enabled,
warmer_tick_sec,
)
_STOP_EVENT = threading.Event()
def _handle_stop_signal(signum: int, _frame: Optional[FrameType]) -> None:
logger.info("cache warmer worker stopping signal={}", signum)
_STOP_EVENT.set()
def main() -> None:
signal.signal(signal.SIGINT, _handle_stop_signal)
signal.signal(signal.SIGTERM, _handle_stop_signal)
if not warmer_enabled():
logger.warning("cache warmer worker disabled; idling")
while not _STOP_EVENT.wait(3600):
pass
return
warmer = build_default_cache_warmer()
tick_sec = warmer_tick_sec()
logger.info(
"cache warmer worker started tick={}s city_batch={}",
tick_sec,
warmer.city_batch_size,
)
while not _STOP_EVENT.is_set():
try:
completed = warmer.run_due_once()
logger.debug("cache warmer run completed work_items={}", completed)
except Exception as exc:
logger.exception("cache warmer loop failed: {}", exc)
_STOP_EVENT.wait(tick_sec)
if __name__ == "__main__":
main()