Borrar caché LRU en Python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *