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.

Acompanhamento do usoklepto:

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.

questionAnswers(4)

yourAnswerToTheQuestion