python / expert
Snippet
Speichereffizientes Caching mit WeakRef
Ein WeakValueDictionary hält 'schwache' Referenzen auf seine Werte. Wenn ein Objekt nirgendwo anders im Programm mehr referenziert wird, kann der Garbage Collector es löschen, selbst wenn es noch ein Wert im Dictionary ist, was automatisch Speicherlecks in Caches verhindert.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
import weakrefclass DataBlob:def __init__(self, data): self.data = datacache = weakref.WeakValueDictionary()blob = DataBlob("heavy-data")cache["key"] = blobprint("Cached:", "key" in cache)del blobprint("After del:", "key" in cache)
Erklärung
1
cache = weakref.WeakValueDictionary()
Erstellt ein Dictionary, dessen Werte bereinigt werden, wenn keine starken Referenzen existieren.
2
del blob
Entfernt die einzige starke Referenz und löst die sofortige Bereinigung aus dem Cache aus.