Я ищу способ построения декоратора @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
, что заставляет повторный показ, но does not update the cache.
Последующая деятельность по использованию klepto
:
Есть ли способ, чтобы иметь klepto
(см @ ответ Уолли) кэшировать результаты по умолчанию в определенном месте? (например, /some/path/
) и поделиться этим местоположением по нескольким функциям? Например. Я хотел бы сказать,
cache_path = "/some/path/"
и затем @memoize
несколько функций в данном модуле в том же пути.
'functools.lru_cache' является запоминанием декоратора, который обеспечивает способ, чтобы очистить весь кэш (но не определенный вызов, как в вашем пример). – interjay