[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