[pyar] weakref.WeakValueDictionary

Andres Riancho andres.riancho en gmail.com
Jue Ene 10 14:17:17 ART 2013


Lista,

    Estoy intentando hacer que un objeto (en este caso poc) sea
eliminado de la memoria por el GC cuando no haya mas referencias
externas al mismo. Mi codigo tiene actualmente un diccionario,
self.handlers, que tiene punteros a varios metodos; entonces cuando
externamente no apunto mas a una instancia de poc todavia quedan
referencias a ese objeto desde el diccionario.

    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 :(

"""
import weakref

class poc(object):
    def __init__(self, dict_impl):
        self.handlers = dict_impl({'URL': self.handle_url})

    def handle(self, method, obj):
        self.handlers[method](obj)

    def handle_url(self, obj):
        print obj


if __name__ == '__main__':
    dict_poc = poc(dict)
    dict_poc.handle('URL', 1) # funciona, imprime 1

    weak_poc = poc(weakref.WeakValueDictionary)
    weak_poc.handle('URL', 1) # crash
"""

Saludos,
--
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