Decoradores para armazenamento em cache seletivo / memorização
Estou procurando uma maneira de construir um decorador@memoize
que eu posso usar em funções da seguinte maneira:
@memoize
my_function(a, b, c):
# Do stuff
# result may not always be the same for fixed (a,b,c)
return result
Então, se eu fizer:
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)
Agora diga que eu queroforçar uma atualização de cache:
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
No final do exposto, sempre temosresult4 = result3
, mas não necessariamenteresult4 = result
, é por isso que é preciso ter uma opção para forçar a atualização do cache para os mesmos parâmetros de entrada.
Como posso abordar esse problema?
Nota sobrejoblib
Até onde seijoblib
suporta.call
, o que força uma repetição, masnão atualiza o cache.
klepto
:Existe alguma maneira de terklepto
(consulte a resposta de @ Wally) armazena em cache seus resultados por padrão em um local específico? (por exemplo./some/path/
) e compartilhar esse local em várias funções? Por exemplo. eu gostaria de dizer
cache_path = "/some/path/"
e depois@memoize
várias funções em um determinado módulo no mesmo caminho.