Mientras leía la documentación en el módulo Python re
, decidí echar un vistazo al código fuente re.py
.Limitación de caché del módulo Python re
cuando la abrí, me encontré con esto:
_cache = {}
_MAXCACHE = 100
def _compile(*key):
cachekey = (type(key[0]),) + key
p = _cache.get(cachekey)
if p is not None:
return p
#...Here I skip some part of irrelevant to the question code...
if len(_cache) >= _MAXCACHE:
_cache.clear()
_cache[cachekey] = p
return p
¿Por qué es la memoria caché se aclaró usando _cache.clear()
cuando alcanza _MAXCACHE
de las entradas?
¿Es un enfoque común limpiar completamente la caché y comenzar desde cero?
¿Por qué no se utilizó hace más tiempo que se elimina el valor en efectivo?
Pregunta interesante. Supongo que podría haber sido la pereza por parte del desarrollador que escribió este código, o tal vez el pensamiento "El simple es mejor que el complejo". :-) – NPE
Pensé que podría haber alguna investigación científica que justificara ese enfoque de borrar el caché al alcanzar un valor constante de tamaño. – ovgolovin
Puede ser interesante ver el origen del nuevo módulo de expresión regular en desarrollo, que se rastrea aquí: http://bugs.python.org/issue2636. La descripción incluye el término "Almacenamiento en caché inteligente", por lo que puede haber algunas mejoras realizadas en esa área. –