2014-11-04 1 views
6

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

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

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

+0

Возможно ли проверить измененное время файла на сервере перед загрузкой файла? – suzanshakya

ответ

0

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

  • DownLoader

  • анализатор & заставки

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

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

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)