Метод Flask-Caching FileSystemCache не удаляет элементы кэша по истечении времени ожидания - PullRequest
1 голос
/ 19 сентября 2019

У меня есть приложение Flask, и я реализовал расширение "Flask-Caching".Я использую метод FileSystemCache.Это все для меня в новинку, поэтому оно может работать правильно, и я ничего не знаю.

Я обнаружил, что когда я вызываю cache.clear (), я вижу удаление элементов из каталога, указанного в качестве расположения моего кэша,Однако, когда я устанавливаю тайм-аут на очень короткий промежуток времени, я не вижу удаляемых файлов по истечении времени ожидания.

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

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

С точки зрения соответствующего кода, это не так много:

cache = Cache(app,config={'CACHE_TYPE': 'filesystem', 
                      'CACHE_DIR': r"<my cache directory>", 
                      'CACHE_DEFAULT_TIMEOUT': 15})

Время ожидания составляет всего 15 секунд, чтобы помочь мне в тестировании, но оно будет увеличено позже.Во всем моем коде я действительно использую только @ cache.memoize () и случайный cache.delete_memoized ().

1 Ответ

0 голосов
/ 20 сентября 2019

Flask-Caching не обязательно автоматически удаляет элементы кэша после истечения времени ожидания.Как правило, это будет сделано только при выполнении определенных операций.Например, в FileSystemCache, если вы посмотрите на исходный код для функции get() , вы увидите, что если вы попытаетесь получить кэшированный элемент, срок действия которого истек, он удалит файл и вернетNone.

Также, глядя на исходный код для функции set() , вы можете увидеть вызов _prune() ( исходный код ).Это внутренняя функция, которая (, если число кэшируемых файлов превышает пороговое значение, установленное в конструкторе ), просматривает файлы в каталоге кэша и удаляет файлы с истекшим сроком действия.

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

Надеюсь, это поможет!

...