сон
This commit is contained in:
@@ -1603,65 +1603,49 @@ def main():
|
|||||||
parser.add_argument("--lang", default="en")
|
parser.add_argument("--lang", default="en")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# бесконечный дневной цикл
|
|
||||||
while True:
|
while True:
|
||||||
# на каждый цикл — новая сессия и новый stop_event
|
|
||||||
session = create_session()
|
session = create_session()
|
||||||
stop_event = threading.Event()
|
stop_event = threading.Event()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# один полный прогон логики дня:
|
|
||||||
# - обновить сезоны/календарь
|
|
||||||
# - если есть матч и он лайв -> отследить до финала
|
|
||||||
# - записать статику для последней игры, если она уже завершилась
|
|
||||||
get_data_API(session, args.league, args.team, args.lang, stop_event)
|
get_data_API(session, args.league, args.team, args.lang, stop_event)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
# оператор сказал "хватит"
|
logger.info("KeyboardInterrupt -> остановка по запросу оператора")
|
||||||
logger.info("KeyboardInterrupt -> останавливаемся сразу")
|
|
||||||
stop_event.set()
|
stop_event.set()
|
||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# не падаем навсегда от любой ошибки, просто логируем
|
logger.exception(f"main loop crash: {e}")
|
||||||
logger.exception(f"main-loop crash: {e}")
|
|
||||||
|
|
||||||
# сюда мы попадаем всегда, даже если:
|
|
||||||
# - сегодня не было матча
|
|
||||||
# - матч был, но ещё не начался
|
|
||||||
# - матч уже давно закончился
|
|
||||||
# - матч только что отследили в онлайне до свистка
|
|
||||||
|
|
||||||
|
# Спим до 00:05 следующего дня
|
||||||
now = datetime.now(APP_TZ)
|
now = datetime.now(APP_TZ)
|
||||||
|
|
||||||
# время следующего старта: завтра в 00:05 по APP_TZ (Europe/Moscow в коде)
|
|
||||||
tomorrow = (now + timedelta(days=1)).replace(
|
tomorrow = (now + timedelta(days=1)).replace(
|
||||||
hour=0, minute=5, second=0, microsecond=0
|
hour=0, minute=5, second=0, microsecond=0
|
||||||
)
|
)
|
||||||
|
|
||||||
# если вдруг сейчас уже >00:05 (например мы запустились в 00:10),
|
|
||||||
# то завтра уже будет +1 день от текущей даты, но нам это и нужно.
|
|
||||||
sleep_seconds = (tomorrow - now).total_seconds()
|
sleep_seconds = (tomorrow - now).total_seconds()
|
||||||
if sleep_seconds < 0:
|
if sleep_seconds < 0:
|
||||||
# это теоретический случай, если .replace() попал в прошлое;
|
|
||||||
# подстрахуемся: спать до 00:05 следующего дня +1
|
|
||||||
tomorrow = (now + timedelta(days=2)).replace(
|
tomorrow = (now + timedelta(days=2)).replace(
|
||||||
hour=0, minute=5, second=0, microsecond=0
|
hour=0, minute=5, second=0, microsecond=0
|
||||||
)
|
)
|
||||||
sleep_seconds = (tomorrow - now).total_seconds()
|
sleep_seconds = (tomorrow - now).total_seconds()
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Работа за день завершена. Спим до {tomorrow.strftime('%d.%m %H:%M')} "
|
f"Работа завершена. Засыпаем до {tomorrow.strftime('%d.%m %H:%M')} "
|
||||||
f"(~{round(sleep_seconds/3600, 2)} ч)."
|
f"(~{round(sleep_seconds/3600, 2)} ч)."
|
||||||
)
|
)
|
||||||
|
|
||||||
# мягкий сон. если во время сна дадут Ctrl+C — просто выходим.
|
|
||||||
try:
|
try:
|
||||||
time.sleep(sleep_seconds)
|
time.sleep(sleep_seconds)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
logger.info("KeyboardInterrupt во время сна -> выходим.")
|
logger.info("KeyboardInterrupt во время сна -> выходим.")
|
||||||
break
|
break
|
||||||
|
|
||||||
# после пробуждения while True просто идёт на новую итерацию
|
# и снова в бой — новый день
|
||||||
# и запускает новую сессию / новый stop_event / новый get_data_API
|
stop_event = threading.Event()
|
||||||
|
session = create_session()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user