[Python-3000] PEP: Eliminate del (original) (raw)
Greg Ewing greg.ewing at canterbury.ac.nz
Sun May 6 01:46:38 CEST 2007
- Previous message: [Python-3000] the future of the GIL
- Next message: [Python-3000] PEP 3112
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Giovanni Bajo wrote:
class Holder: def init(self): self.resource = .... _self.wr = weakref(self.resource, ....)
So, are you saying that it's possible that the weakreference refcount goes to zero before Holder's refcount?
No, but depending on the order in which the dict contents gets decrefed when Holder is deallocated, the __wr attribute may get deallocated before the resource attribute. If that happens, the callback is never called.
I have run the following code with Python 2.3, 2.4 and 2.5 and it does not print "Cleaning up":
from weakref import ref
class Resource: pass
def cleanup(x): print "Cleaning up"
class Holder:
def __init__(self):
self.resource = Resource()
self.weakref = ref(self.resource, cleanup)
h = Holder() del h
Are you saying that the fact that it works for me in real-world code is just out of luck and might randomically break?
If this is really what you're doing, then yes, it will randomly break. I may have misunderstood exactly what it is you're doing, however.
-- Greg
- Previous message: [Python-3000] the future of the GIL
- Next message: [Python-3000] PEP 3112
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]