Декораторы для выборочного кэширования / запоминания
Я ищу способ создания декоратора@memoize
что я могу использовать в функциях следующим образом:
@memoize
my_function(a, b, c):
# Do stuff
# result may not always be the same for fixed (a,b,c)
return result
Тогда, если я сделаю:
result1 = my_function(a=1,b=2,c=3)
# The function f runs (slow). We cache the result for later
result2 = my_function(a=1, b=2, c=3)
# The decorator reads the cache and returns the result (fast)
Теперь скажи, что я хочупринудительно обновить кеш:
result3 = my_function(a=1, b=2, c=3, force_update=True)
# The function runs *again* for values a, b, and c.
result4 = my_function(a=1, b=2, c=3)
# We read the cache
В конце вышесказанного у нас всегда естьresult4 = result3
, но не обязательноresult4 = result
, поэтому нужна опция принудительного обновления кэша для тех же входных параметров.
Как я могу подойти к этой проблеме?
Обратите внимание наjoblib
Насколько я знаюjoblib
опоры.call
, который заставляет перезапуск, но этоне обновляет кеш.
klepto
:Есть ли способ иметьklepto
(см. ответ @ Wally) кэшировать его результаты по умолчанию в определенном месте? (например./some/path/
) и разделить это местоположение между несколькими функциями? Например. я хотел бы сказать
cache_path = "/some/path/"
а потом@memoize
несколько функций в данном модуле по одному и тому же пути.