[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