[pyar] weakref.WeakValueDictionary

Andres Riancho andres.riancho en gmail.com
Jue Ene 10 15:59:58 ART 2013


Interesante, gracias a todos por sus respuestas!

2013/1/10 Claudio Freire <klaussfreire en gmail.com>:
> 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.
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar



-- 
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3



More information about the pyar mailing list