поправил статус засыпания и просыпания если игра сегодня
This commit is contained in:
51
get_data.py
51
get_data.py
@@ -769,6 +769,47 @@ def status_broadcaster():
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def start_prestart_watcher(game_dt: datetime | None):
|
||||
"""
|
||||
Следит за временем начала игры.
|
||||
Как только до матча остаётся <= 1ч10м — включает live-треды.
|
||||
Работает только для "игра сегодня".
|
||||
"""
|
||||
if not game_dt:
|
||||
return # нечего ждать
|
||||
|
||||
def _runner():
|
||||
global STATUS
|
||||
# за сколько включать live
|
||||
lead = timedelta(hours=1, minutes=10)
|
||||
switch_at = game_dt - lead
|
||||
|
||||
while not stop_event.is_set():
|
||||
now = datetime.now()
|
||||
|
||||
# если игра уже live/finished — не мешаем
|
||||
if STATUS in ("live", "finished", "finished_wait", "finished_today"):
|
||||
break
|
||||
|
||||
# если время подошло — включаем live и выходим
|
||||
if now >= switch_at:
|
||||
logger.info(
|
||||
f"[prestart] it's {now}, game at {game_dt}, enabling LIVE threads (1h10m rule)"
|
||||
)
|
||||
STATUS = "live_soon"
|
||||
# сначала гасим оффлайн, если он крутится
|
||||
stop_offline_threads()
|
||||
# а потом включаем live
|
||||
start_live_threads(SEASON, GAME_ID)
|
||||
break
|
||||
|
||||
# иначе спим немного и проверяем снова
|
||||
time.sleep(30) # можно 15–60 сек
|
||||
|
||||
t = threading.Thread(target=_runner, daemon=True)
|
||||
t.start()
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
global STATUS, GAME_ID, SEASON, GAME_START_DT, GAME_TODAY, GAME_SOON
|
||||
@@ -921,13 +962,18 @@ async def lifespan(app: FastAPI):
|
||||
start_offline_threads(SEASON, GAME_ID)
|
||||
else:
|
||||
# игра сегодня
|
||||
# в любом случае запускаем сторож, если знаем время игры
|
||||
start_prestart_watcher(game_dt)
|
||||
|
||||
if cal_status is None:
|
||||
STATUS = "today_not_started"
|
||||
start_offline_threads(SEASON, GAME_ID)
|
||||
|
||||
elif cal_status == "Scheduled":
|
||||
if game_dt:
|
||||
delta = game_dt - datetime.now()
|
||||
if delta <= timedelta(hours=1):
|
||||
# если мы уже МЕНЬШЕ чем за 1:10 до игры — сразу в live
|
||||
if delta <= timedelta(hours=1, minutes=10):
|
||||
STATUS = "live_soon"
|
||||
start_live_threads(SEASON, GAME_ID)
|
||||
else:
|
||||
@@ -936,16 +982,17 @@ async def lifespan(app: FastAPI):
|
||||
else:
|
||||
STATUS = "today_not_started"
|
||||
start_offline_threads(SEASON, GAME_ID)
|
||||
|
||||
elif cal_status == "Online":
|
||||
STATUS = "live"
|
||||
start_live_threads(SEASON, GAME_ID)
|
||||
|
||||
elif cal_status in ["Result", "ResultConfirmed"]:
|
||||
STATUS = "finished_today"
|
||||
start_offline_threads(SEASON, GAME_ID)
|
||||
else:
|
||||
STATUS = "today_not_started"
|
||||
start_offline_threads(SEASON, GAME_ID)
|
||||
|
||||
yield
|
||||
|
||||
# -------- shutdown --------
|
||||
|
||||
Reference in New Issue
Block a user