sagen, ich habe diese Methode, die ich lru_cache
-Cache:Python lru_cache Nutzungsoptimierung
@lru_cache(maxsize=8)
def very_expensive_call(number):
# do something that's very expensive
return number
ich diese Methode wie folgt aufrufen:
print([very_expensive_call(i) for i in range(10)]) # call_1
Da die maxsize des Cache 8, nur Die Nummern 2-9 werden an diesem Punkt zwischengespeichert.
Nach call_1, ich tue call_2:
print([very_expensive_call(i) for i in range(10)]) # call_2
Während call_2, wieder erste Zahl 0
aufgerufen wird (nicht im Cache!), Und nach, dass die Zahlen 0 und 09.03 zwischengespeichert werden. Dann wird die Nummer 1
aufgerufen (nicht im Cache!) Und danach werden die Nummern 0-1 und 4-9 zwischengespeichert. Nun, sehen Sie, wohin dies geht: Der Cache wird verwendet, nie ...
Ich verstehe, dass für dieses spezielle Beispiel, das ich zwischen range(...
und reverse(range(...
aber in einem komplizierteren Szenario wechseln könnte, die wahrscheinlich nicht möglich ist.
Frage: Ist es möglich, zu überprüfen, welche Nummern zwischengespeichert werden, und um die Anrufe basierend darauf zu ordnen? Was wäre der Aufwand dafür?
Danke für die Beantwortung. Ich verstehe, dass es gegen die Philosophie von lru_cache ist. Ich denke, dass es in meinem Fall eher ein Optimierungsproblem ist: Als ich entdeckte, dass ich eine Methode immer wieder mit ein paar mehr verschiedenen Argumenten aufruft, kam mein MaxSize und plötzlich der Cache überhaupt nicht mehr zum Einsatz. Wird wahrscheinlich auf zunehmende maxsize zurückgreifen. –