[Python-Dev] PEP: Post import hooks

Phillip J. Eby pje at telecommunity.com
Tue Jan 15 23:04:42 CET 2008


At 10:14 PM 1/15/2008 +0100, Christian Heimes wrote:
>My code queues up new hooks while a sequence of hooks is processed. It
>makes sure that hooks for a parent aren't called in the middle of a
>child's hook chain.

Notice that that's not necessary with the notification algorithm I 
gave, since the list in post_import_hooks suffices as a queue.  So, 
just as in peak.util.imports, the registration code doesn't need to 
know whether callbacks are being run; it only needs to know whether 
they're *finished*.

Of course, both the notification and registration functions must hold 
the import lock to prevent a race condition where one thread adds a 
hook to the list after another thread has just finished iterating 
over it and is about to replace the list with None.  At least, they 
have to if they're executing any Python code that might cause the GIL 
to be released.  The callbacks will release the GIL, of course, but 
the registration code probably doesn't...  well, it will if it calls 
the hook, and ISTM that the hooks should always execute with the 
import lock held, even if they're fired at registration.



More information about the Python-Dev mailing list