Я понимаю, что это вопрос 2-х летнего возраста, и он не будет считаться "установленным" декоратором, но ...
Это достаточно просто, и вам не нужно беспокоитьсяо только с использованием установленного кода.Модуль docs ссылается на источник , поскольку, помимо того, что он полезен сам по себе, он работает как пример кода.
Итак, что вам нужнодобавлять?Добавьте параметр filename
.Во время выполнения, pickle.load
имя файла в cache
, используя {}
, если это не удается.Добавьте cache_save
функцию, которая просто pickle.save
s кеширует файл под блокировкой.Присоедините эту функцию к wrapper
так же, как к существующим (cache_info
и т. Д.).
Если вы хотите автоматически сохранить кэш, а не оставлять его на усмотрение вызывающего, это просто;это просто вопрос, когда это сделать.Любая опция, с которой вы столкнетесь - atexit.register
, добавление аргумента save_every
, чтобы сохранить все save_every
пропуски, ... - тривиально реализовать.В этом ответе я показал, как мало работы требуется.Или вы можете получить полную рабочую версию (для настройки или использования как есть) на GitHub .
Существуют и другие способы ее расширения - добавить статистику, связанную с сохранением (время последнего сохранения, попадания и пропуски с момента последнего сохранения,…) в cache_info
, скопируйте кэш и сохраните его в фоновом потоке вместо сохранения в строке и т. д. Но я не могу придумать ничего, что стоило бы сделатьэто было бы нелегко.