Ich suche nach einer Python-Caching-Bibliothek, kann aber bisher nichts finden. Ich brauche eine einfache dict
Oberfläche, in der ich Schlüssel und deren Ablauf festlegen und sie wieder zwischengespeichert bekommen kann. So etwas wie:
cache.get(myfunction, duration=300)
Dadurch bekomme ich das Element aus dem Cache, falls es vorhanden ist, oder rufe die Funktion auf und speichere es, wenn es nicht vorhanden ist oder abgelaufen ist. Kennt jemand so etwas?
item
in Ihrem Beispiel.Antworten:
Schauen Sie sich Beaker an:
quelle
Ab Python 3.2 können Sie den Decorator @lru_cache aus der functools-Bibliothek verwenden. Es ist ein zuletzt verwendeter Cache, daher gibt es keine Ablaufzeit für die darin enthaltenen Elemente, aber als schneller Hack ist er sehr nützlich.
quelle
Sie können sich auch den Memoize-Dekorateur ansehen . Sie könnten es wahrscheinlich dazu bringen, das zu tun, was Sie wollen, ohne zu viel Modifikation.
quelle
Joblib https://joblib.readthedocs.io unterstützt Caching-Funktionen im Memoize-Muster. Meistens besteht die Idee darin, rechenintensive Funktionen zwischenzuspeichern.
Sie können auch ausgefallene Dinge tun, wie den @ memory.cache-Dekorator für Funktionen. Die Dokumentation finden Sie hier: https://joblib.readthedocs.io/en/latest/generated/joblib.Memory.html
quelle
Noch hat niemand das Regal erwähnt. https://docs.python.org/2/library/shelve.html
Es ist nicht zwischengespeichert, sieht aber viel einfacher aus und passt möglicherweise zu Ihren Anforderungen.
quelle
Ich denke, die Python Memcached API ist das vorherrschende Tool, aber ich habe sie selbst nicht verwendet und bin mir nicht sicher, ob sie die von Ihnen benötigten Funktionen unterstützt.
quelle
quelle
get
Methode implementieren , sollte dies keine Dikt-Unterklasse sein, sondern ein Objekt mit einem eingebetteten Dikt.Sie können meine einfache Lösung für das Problem verwenden. Es ist wirklich unkompliziert, nichts Besonderes:
Es fehlt zwar die Ablauffunktion, aber Sie können sie leicht erweitern, indem Sie eine bestimmte Regel in MemCache c-tor angeben.
Der Hoffnungscode ist selbsterklärend genug, aber wenn nicht, um nur zu erwähnen, wird dem Cache eine Übersetzungsfunktion als einer seiner C-Tor-Parameter übergeben. Es wird wiederum verwendet, um eine zwischengespeicherte Ausgabe bezüglich der Eingabe zu generieren.
Ich hoffe es hilft
quelle
else
in__getitem__
:)else
in der__getitem__
? Dort bevölkert er das Diktat ...Versuchen Sie es mit redis. Es ist eine der saubersten und einfachsten Lösungen für Anwendungen, um Daten auf atomare Weise gemeinsam zu nutzen, oder wenn Sie über eine Webserverplattform verfügen. Es ist sehr einfach einzurichten, Sie benötigen einen Python Redis Client http://pypi.python.org/pypi/redis
quelle
Schauen Sie sich gocept.cache auf pypi an und verwalten Sie das Timeout.
quelle
Dieses Projekt zielt darauf ab, "Caching für Menschen" bereitzustellen (scheint jedoch ziemlich unbekannt zu sein)
Einige Infos von der Projektseite:
Installation
Pip Install Cache
Verwendung:
quelle
Schauen Sie sich bda.cache an http://pypi.python.org/pypi/bda.cache - verwendet ZCA und wird mit zope und bfg getestet.
quelle
Schlüsselring ist die beste Python-Caching-Bibliothek. Sie können verwenden
quelle