capypad
0 Tage Serie
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
python
1
2
3
4
5
6
7
8
9
10
11
12
import weakref
 
class DataBlob:
def __init__(self, data): self.data = data
 
cache = weakref.WeakValueDictionary()
blob = DataBlob("heavy-data")
cache["key"] = blob
 
print("Cached:", "key" in cache)
del blob
print("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.