[pyar] weakref.WeakValueDictionary
Claudio Freire
klaussfreire en gmail.com
Jue Ene 10 15:47:22 ART 2013
2013/1/10 Andres Riancho <andres.riancho en gmail.com>:
> Para solucionar esto se me ocurrio utilizar
> weakref.WeakValueDictionary; pero se ve que algo estoy haciendo mal,
> pero QUE? Les dejo una prueba de concepto que demuestra lo que quiero
> hacer y crashea :(
Lo que tiene que ser weak, es la referencia a poc, no al handler:
import weakref
class poc(object):
def __init__(self):
self.handlers =
weakref.WeakKeyDictionary({self:{'URL':self.handle_url}})
def handle(self, method, obj):
self.handlers[self][method](obj)
def handle_url(self, obj):
print obj
def __del__(self):
print 'deleted'
if __name__ == '__main__':
dict_poc = poc()
dict_poc.handle('URL', 1) # funciona, imprime 1
Fijate, que con el __del__, ese poc no es colectable (y genera un leak
de memoria). Es útil en este caso para corroborar que sin el __del__
sí se borraría (gc lo considera basura):
>>> p = poc()
>>> del p
>>>
>>> gc.collect()
19
>>> gc.garbage
[<__main__.poc object at 0x7f1661d54dd0>]
O sea que, **quitando el __del__**, me parece que obtenés el resultado
que querías.
More information about the pyar
mailing list