Кэширование загруженного файла на основе измененного времени с использованием dogpile

Я пишу программу, которая загружает большой файл (~150 МБ) и анализирует данные в более полезный файл текстового формата. Процесс загрузки, особенно анализ, медленный (всего ~20 минут), поэтому я бы хотел кешировать результат.

Результатом загрузки является набор файлов, а результатом анализа является один файл, поэтому я могу вручную проверить, существуют ли эти файлы, и если да, проверить их время изменения; однако, так как я уже использую собачью кучу с бэкендом redis для вызовов веб-служб в других местах кода, мне было интересно, можно ли использовать для этого собачий кучу?

Итак, мой вопрос: можно ли использовать dogpile для кэширования файла в зависимости от времени его изменения?

1 ответ

Почему вы не хотите разделять программу на несколько частей:

  • загрузчик

  • парсер и заставка

  • работник с результатами

Вы можете использовать переменную кэша для хранения нужного вам значения, которое вы будете обновлять при обновлении файла.

   import os
   import threading
   _lock_services=threading.Lock()
   tmp_file="/tmp/txt.json"
   update_time_sec=3300
   with _lock_services:
   # if file was created more the 50min ago
   # here you can check if file was updated and update your cache variable
        if os.path.getctime(tmp_file) < (time.time() - update_time_sec):
            os.system("%s  >%s" %("echo '{}'",tmp_file))

        with open(tmp_file,"r") as json_data:
            cache_variable = json.load(json_data)
Другие вопросы по тегам