Files
PolyWeather/web/observation_collector_worker.py
T
2026-06-14 18:44:49 +08:00

46 lines
1.2 KiB
Python

"""Standalone observation collector process.
The FastAPI web worker must stay responsive for health checks and user-facing
API routes. High-frequency source polling runs here instead of inside the web
request process.
"""
from __future__ import annotations
import signal
import threading
from types import FrameType
from typing import Optional
from loguru import logger
from web.core import _weather
from web.observation_collector_service import start_observation_collector_loop
_STOP_EVENT = threading.Event()
def _handle_stop_signal(signum: int, _frame: Optional[FrameType]) -> None:
logger.info("observation collector worker stopping signal={}", signum)
_STOP_EVENT.set()
def main() -> None:
signal.signal(signal.SIGINT, _handle_stop_signal)
signal.signal(signal.SIGTERM, _handle_stop_signal)
thread = start_observation_collector_loop(
weather=_weather,
)
if thread is None:
logger.warning("observation collector worker started with collector disabled")
else:
logger.info("observation collector worker started thread={}", thread.name)
while not _STOP_EVENT.wait(3600):
pass
if __name__ == "__main__":
main()