¿Cómo uso cache_clear () en python @ functools.lru_cache?

La documentación establece:

El decorador también proporciona una función cache_clear() para borrar o invalidar el caché.

No proporciona ningún ejemplo u orientación sobre cómo usar cache_clear()

Tengo dos preguntas:

  • ¿Cómo puedo ejecutar cache_clear() desde una función diferente?
  • Si coloco condicionalmente una llamada cache_clear() dentro de la función que se está almacenando en caché, ¿se ejecutará alguna vez?

Además del almacenamiento en caché, lru_cache decorator también agrega nuevas funciones a la función decorada – cache_info y cache_clear . A continuación se muestra un ejemplo simple que debería explicar cómo funcionan:

 >>> @lru_cache(5) ... def foo(): ... print('Executing foo...') ... >>> foo() Executing foo... >>> foo() >>> foo.cache_info() CacheInfo(hits=1, misses=1, maxsize=5, currsize=1) >>> foo.cache_clear() >>> foo() Executing foo... 

Contestando tus preguntas:

Si coloco condicionalmente una llamada cache_clear () dentro de la función que se está almacenando en caché, ¿se ejecutará alguna vez?

Si el resultado no está en caché ya, la función se ejecutará y, en función de sus condiciones, debería ejecutar cache_clear . Sin embargo, no usaría esa solución. Una buena práctica es invalidar fuera del objeto almacenado en caché, de lo contrario, no corre el riesgo de ser invalidado en el peor de los casos, sino de código ilegible en el mejor de los casos.

¿Cómo puedo ejecutar cache_clear () desde una función diferente?

Solo importa la función en caché y llama a cache_clear en ella:

 from x import foo def bar(): foo.cache_clear()