← retour aux snippets

weakref.finalize: exécuter un cleanup à la GC

Attacher une fonction de nettoyage appelée quand l'objet est collecté.

python memory #weakref#finalize#gc

objectif

Attacher une fonction de nettoyage appelée quand l’objet est collecté.

code minimal

import weakref, gc
called = {"n":0}
class R: pass
r = R()
f = weakref.finalize(r, lambda: called.__setitem__("n", called["n"]+1))
del r
gc.collect()
print(called["n"] >= 1)  # attendu: True

utilisation

import weakref
class Conn: pass
c = Conn()
fin = weakref.finalize(c, lambda: None)
print(fin.alive is True)

variante(s) utile(s)

import weakref
class A: pass
a = A()
fin = weakref.finalize(a, print, "bye")
del a
print(callable(weakref.finalize))

notes

  • finalize ne garantit pas l’instant précis d’exécution (GC).
  • Préférez context managers pour des ressources critiques.