[Python-ideas] Better support for finalization with weakrefs

Calvin Spealman ironfroggy at gmail.com
Tue Jul 31 15:28:53 CEST 2012


On Mon, Jul 30, 2012 at 12:44 PM, Richard Oudkerk <shibturn at gmail.com> wrote:
> I would like to see better support for the use of weakrefs callbacks
> for object finalization.
>
> The current issues with weakref callbacks include:
>
> 1. They are rather low level, and working out how to use them
>    correctly requires a bit of head scratching.  One must find
>    somewhere to store the weakref till after the referent is dead, and
>    without accidentally keeping the referent alive.  Then one must
>    ensure that the callback frees the weakref (without leaving any
>    remnant ref-cycles).
>
>    When it is an option, using a __del__ method is far less hassle.
>
> 2. Callbacks invoked during interpreter shutdown are troublesome.  For
>    instance they can throw exceptions because module globals have been
>    replaced by None.
>
> 3. Sometimes you want the callback to be called at program exit even
>    if the referent is still alive.
>
> 4. Exceptions thrown in callbacks do not produce a traceback.  This
>    can make debugging rather awkward.  (Maybe this is because printing
>    tracebacks is problematic during interpreter shutdown?)
>
> (Note that problems 2-4 also apply to using __del__ methods.)
>
> If possible I would like to see the weakref module provide a finalize
> class to address these issues.  Trivial usage might be
>
>     >>> class Kenny: pass
>     ...
>     >>> kenny = Kenny()
>     >>> finalize(kenny, print, "you killed kenny!")
>     <finalize.finalize object at 0xffed4f2c>
>     >>> del kenny
>     you killed kenny!
>
> Prototype at https://gist.github.com/3208245

I like how simple it is, but it might be too simple. That is,
shouldn't we have a way to unregister the callback?

> Cheers,
>
> Richard
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas



-- 
Read my blog! I depend on your acceptance of my opinion! I am interesting!
http://techblog.ironfroggy.com/
Follow me if you're into that sort of thing: http://www.twitter.com/ironfroggy



More information about the Python-ideas mailing list