La LRU es la memoria caché usada menos recientemente. LRU Cache es un tipo de memoria de alta velocidad que se utiliza para acelerar la velocidad de recuperación de los datos de uso frecuente. Se implementa con la ayuda de estructuras de datos Queue y Hash.
Nota: Para obtener más información, consulte Python: caché LRU
¿Cómo se puede interactuar con el caché LRU en Python?
El módulo functool de Python ha proporcionado funcionalidad para interactuar con LRU Cache desde Python 3.2. El módulo functool ofrece un decorador que se puede colocar encima de una Clase de una función en Python. Cuando se usa en funciones que requieren grandes cantidades de acceso variable y operaciones de cambio, el uso de LRU Cache ofrece una aceleración masiva.
Ejemplo:
import functools @functools.lru_cache(maxsize = None) def gfg(): # insert function logic here pass
Alternativamente, el tamaño máximo se puede cambiar para adaptarse a las preferencias propias. El valor se mide en kbs y maxsize toma un argumento entero
Borrado de caché LRU
Después del uso del caché, cache_clear() se puede usar para borrar o invalidar el caché.
Ejemplo 1:
import functools @functools.lru_cache(maxsize = None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) fib(30) # Before Clearing print(fib.cache_info()) fib.cache_clear() # After Clearing print(fib.cache_info())
Producción:
CacheInfo(hits=28, misses=31, maxsize=None, currsize=31) CacheInfo(hits=0, misses=0, maxsize=None, currsize=0)
Ejemplo 2: Además, también se puede llamar a cache_clear() desde otra función
import functools @functools.lru_cache(maxsize = None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) def gfg(): fib.cache_clear() fib(30) # Before Clearing print(fib.cache_info()) gfg() # After Clearing print(fib.cache_info())
Producción:
CacheInfo(hits=28, misses=31, maxsize=None, currsize=31) CacheInfo(hits=0, misses=0, maxsize=None, currsize=0)
Estos métodos tienen limitaciones, ya que están individualizados y la función cache_clear() debe escribirse para todos y cada uno de los cachés LRU que utilizan la función. Podemos superar este problema mediante el uso del módulo de recolección de elementos no utilizados incorporado de Python para recopilar todos los objetos que tienen contenedores de caché LRU y borrar iterativamente el caché de cada objeto.
Ejemplo:
import gc import functools @functools.lru_cache(maxsize = None) def gfg(): # insert function logic here pass @functools.lru_cache(maxsize = None) def gfg1(): # insert function logic here pass @functools.lru_cache(maxsize = None) def gfg2(): # insert function logic here pass gfg() gfg1() gfg2() gc.collect() # All objects collected objects = [i for i in gc.get_objects() if isinstance(i, functools._lru_cache_wrapper)] # All objects cleared for object in objects: object.cache_clear()
Publicación traducida automáticamente
Artículo escrito por viswalahiri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA