LRU Cache

Code-Stücke können hier veröffentlicht werden.
Antworten
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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/
TUFKAB – the user formerly known as blackbird
rayo
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.

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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?
Antworten