Durante la lettura della documentazione sul modulo Python re
ho deciso di dare un'occhiata al codice sorgente re.py
.Cancellazione cache del modulo Python
Quando l'ho aperto, ho trovato questo:
_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
Perché la cache cancellata usando _cache.clear()
quando raggiunge _MAXCACHE
di voci?
È un approccio comune cancellare completamente la cache e iniziare da zero?
Perché non utilizzato il valore incassato più tempo fa viene cancellato?
Interessante domanda. Suppongo che potrebbe essere stata la pigrizia da parte dello sviluppatore che ha scritto questo codice, o forse il pensiero "Semplice è meglio del complesso". :-) – NPE
Ho pensato che potrebbe esserci qualche ricerca scientifica che giustifica tale approccio di compensazione della cache al raggiungimento di un valore costante in termini di dimensioni. – ovgolovin
Potrebbe essere interessante osservare la sorgente del nuovo modulo regex in fase di sviluppo qui rintracciato: http://bugs.python.org/issue2636. La descrizione include il termine "Smart Caching", quindi potrebbero esserci alcuni miglioramenti apportati in quell'area. –