[Python-Dev] PEP-419: Protecting cleanup statements from interruptions (original) (raw)

Paul Colomiets paul at colomiets.name
Mon Apr 9 09:05:33 CEST 2012


Hi Benjamin,

On Mon, Apr 9, 2012 at 12:42 AM, Benjamin Peterson <benjamin at python.org> wrote:

2012/4/8 Paul Colomiets <paul at colomiets.name>:

Function 'sys.setcleanuphook' -----------------------------

A new function for the sys module is proposed.  This function sets a callback which is executed every time fincleanup becomes false.  Callbacks get a frame object as their sole argument, so that they can figure out where they are called from. Calling a function every time you leave a finally block? Isn't that a bit expensive?

For signal handler it isn't, because you set it only when signal happens, and remove it when it first happens (in the common case)

For yield-based coroutines, there is a similar overhead of trampoline at each yield and each return, and exit from finally doesn't happen more often than return.

For both greenlets and yield-based coroutines it is intented to be used for exceptional situation (when timeout happens and coroutine currently in finally block), so can be turned off when unneeded (and even turned on only for this specific coroutine).

When hook is not set it's only checking of single pointer for NULL value at each exit from finally. This overhead should be negligible.

-- Paul



More information about the Python-Dev mailing list