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/
LRU Cache
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Warum nimmst du bei get und setdefault nicht try: except? Vorallem bei get ist es ja der normalfall, dass der Key vorhanden ist.
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:
Gruss
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
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()
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Weil der "in" Check schneller ist als ein try/exceptrayo 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.
Joa. Ist ein Bug. Werd ich beheben.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()
TUFKAB – the user formerly known as blackbird
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?
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?