38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Shared cache invalidation marker for the PChome growth opportunity API."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import time
|
|
from pathlib import Path
|
|
|
|
_BASE_DIR = Path(__file__).resolve().parents[1]
|
|
_CACHE_MARKER_FILE = _BASE_DIR / "data" / "pchome_growth_cache_epoch.txt"
|
|
_MEMORY_EPOCH = 0.0
|
|
|
|
|
|
def get_pchome_growth_cache_epoch() -> float:
|
|
"""Return the newest known invalidation epoch across workers."""
|
|
global _MEMORY_EPOCH
|
|
try:
|
|
raw = _CACHE_MARKER_FILE.read_text(encoding="utf-8").strip()
|
|
file_epoch = float(raw or 0)
|
|
except (OSError, ValueError):
|
|
file_epoch = 0.0
|
|
_MEMORY_EPOCH = max(_MEMORY_EPOCH, file_epoch)
|
|
return _MEMORY_EPOCH
|
|
|
|
|
|
def mark_pchome_growth_cache_stale() -> float:
|
|
"""Invalidate cached PChome growth opportunities in every worker."""
|
|
global _MEMORY_EPOCH
|
|
epoch = time.time()
|
|
_MEMORY_EPOCH = max(_MEMORY_EPOCH, epoch)
|
|
try:
|
|
_CACHE_MARKER_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
_CACHE_MARKER_FILE.write_text(f"{epoch:.6f}", encoding="utf-8")
|
|
except OSError:
|
|
pass
|
|
return _MEMORY_EPOCH
|