thread-lock-fix
Some checks failed
Deploy on push / deploy (push) Failing after 10s

This commit is contained in:
Untone 2024-08-07 13:25:48 +03:00
parent 57d25b637d
commit 2f65a538fa

View File

@ -1,3 +1,4 @@
import asyncio
import json import json
import os import os
import time import time
@ -33,10 +34,10 @@ class ViewedStorage:
start_date = datetime.now().strftime("%Y-%m-%d") start_date = datetime.now().strftime("%Y-%m-%d")
@staticmethod @staticmethod
def init(): async def init():
"""Подключение к клиенту Google Analytics с использованием аутентификации""" """Подключение к клиенту Google Analytics с использованием аутентификации"""
self = ViewedStorage self = ViewedStorage
with self.lock: async with self.lock:
# Загрузка предварительно подсчитанных просмотров из файла JSON # Загрузка предварительно подсчитанных просмотров из файла JSON
self.load_precounted_views() self.load_precounted_views()
@ -48,7 +49,7 @@ class ViewedStorage:
logger.info(" * Клиент Google Analytics успешно авторизован") logger.info(" * Клиент Google Analytics успешно авторизован")
# Запуск фоновой задачи # Запуск фоновой задачи
self.worker() _task = asyncio.create_task(self.worker())
else: else:
logger.info(" * Пожалуйста, добавьте ключевой файл Google Analytics") logger.info(" * Пожалуйста, добавьте ключевой файл Google Analytics")
self.disabled = True self.disabled = True
@ -67,7 +68,7 @@ class ViewedStorage:
if now_date == self.start_date: if now_date == self.start_date:
logger.info(" * Данные актуализованы!") logger.info(" * Данные актуализованы!")
else: else:
logger.warn(f" * Файл просмотров {VIEWS_FILEPATH} устарел: {self.start_date}") logger.warning(f" * Файл просмотров {VIEWS_FILEPATH} устарел: {self.start_date}")
with open(VIEWS_FILEPATH, "r") as file: with open(VIEWS_FILEPATH, "r") as file:
precounted_views = json.load(file) precounted_views = json.load(file)
@ -78,15 +79,16 @@ class ViewedStorage:
except Exception as e: except Exception as e:
logger.error(f"Ошибка загрузки предварительно подсчитанных просмотров: {e}") logger.error(f"Ошибка загрузки предварительно подсчитанных просмотров: {e}")
# noinspection PyTypeChecker
@staticmethod @staticmethod
def update_pages(): async def update_pages():
"""Запрос всех страниц от Google Analytics, отсортированных по количеству просмотров""" """Запрос всех страниц от Google Analytics, отсортированных по количеству просмотров"""
self = ViewedStorage self = ViewedStorage
logger.info(" ⎧ Обновление данных просмотров от Google Analytics ---") logger.info(" ⎧ Обновление данных просмотров от Google Analytics ---")
if not self.disabled: if not self.disabled:
try: try:
start = time.time() start = time.time()
with self.lock: async with self.lock:
if self.analytics_client: if self.analytics_client:
request = RunReportRequest( request = RunReportRequest(
property=f"properties/{GOOGLE_PROPERTY_ID}", property=f"properties/{GOOGLE_PROPERTY_ID}",
@ -179,8 +181,8 @@ class ViewedStorage:
update_groups(self.shouts_by_author, author.slug, shout_slug) update_groups(self.shouts_by_author, author.slug, shout_slug)
@staticmethod @staticmethod
def worker(): async def worker():
"""Задача обновления""" """Асинхронная задача обновления"""
failed = 0 failed = 0
self = ViewedStorage self = ViewedStorage
if self.disabled: if self.disabled:
@ -188,7 +190,7 @@ class ViewedStorage:
while True: while True:
try: try:
self.update_pages() await self.update_pages()
failed = 0 failed = 0
except Exception as exc: except Exception as exc:
failed += 1 failed += 1
@ -203,7 +205,7 @@ class ViewedStorage:
logger.info( logger.info(
" ⎩ Следующее обновление: %s" % (t.split("T")[0] + " " + t.split("T")[1].split(".")[0]) " ⎩ Следующее обновление: %s" % (t.split("T")[0] + " " + t.split("T")[1].split(".")[0])
) )
time.sleep(self.period) await asyncio.sleep(self.period)
else: else:
time.sleep(10) await asyncio.sleep(10)
logger.info(" - Попытка снова обновить данные") logger.info(" - Попытка снова обновить данные")