Seite 1 von 1
LRU Cache
Verfasst: Sonntag 11. März 2007, 22:37
von mitsuhiko
Ein Teil meines Wochendes ist draufgegangen als ich versucht habe einen LRU Cache für Jinja zu schreiben. Lustigerweise hab ich im Gegensatz zu dem Snippet im ActiveState Kochbuch und den Versuch von Genshi und Mako keine Linked-Lists, sondern eine stinknormale Liste verwendet. Und für meine Anwendungsfälle scheint das sogar
schneller zu sein.
Wer sowas also braucht:
http://paste.pocoo.org/show/1174/
Verfasst: Montag 12. März 2007, 09:36
von rayo
Hi
Warum nimmst du bei get und setdefault nicht try: except? Vorallem bei get ist es ja der normalfall, dass der Key vorhanden ist.
Code: Alles auswählen
def get(self, key, default=None):
try:
return self[key]
except KeyError:
return default
def setdefault(self, key, default=None):
try:
return self[key]
except KeyError:
self[key] = default
return default
Und funktioniert clear? Ich hab mal schnell bei deque del self._queue[:] versucht, und da gibts bei mir einen TypeError: sequence index must be integer, bei der deque gibts dafür .clear()
Lösen könnte man es so:
Code: Alles auswählen
def clear(self):
self._mapping.clear()
try:
del self._queue[:]
except TypeError:
self._queue.clear()
Gruss
Verfasst: Montag 12. März 2007, 10:31
von mitsuhiko
rayo hat geschrieben:Warum nimmst du bei get und setdefault nicht try: except? Vorallem bei get ist es ja der normalfall, dass der Key vorhanden ist.
Weil der "in" Check schneller ist als ein try/except
Und funktioniert clear? Ich hab mal schnell bei deque del self._queue[:] versucht, und da gibts bei mir einen TypeError: sequence index must be integer, bei der deque gibts dafür .clear()
Joa. Ist ein Bug. Werd ich beheben.
Verfasst: Dienstag 13. März 2007, 18:50
von EnTeQuAk
Darf man mal genauer Fragen, wofür du das genau einsetzt?
Ich bastel auch schon ne Weile an nem geeignetem Token-Cache-System, für meinen
SyntaxParser
um ihm damit ein paar neue Funktionen zu geben... und mit ihm einen kleinen miniAST zu generieren. Aber dein LRU-Cache scheint dafür nicht ganz geeignet oder sehe ich das falsch?