[Python-Dev] Questions about signal handling.

Eric Snow ericsnowcurrently at gmail.com
Tue Sep 25 11:39:47 EDT 2018


On Tue, Sep 25, 2018 at 9:30 AM Gregory P. Smith <greg at krypto.org> wrote:
> We can't change the API of the main thread being where signal handlers are
> executed by default.
>
> If a signal handler raised an exception in a daemon thread, the process would
> not die when it goes uncaught (ie: why KeyboardInterrupt works).  The daemon
> thread ends and the rest of the process is unaware of that.  Many existing
> Python signal handlers expect to only be called from the main thread.

Ah, that's good to know.  Thanks, Greg!

> If we wanted to change this, we'd probably want to have users declare which
> thread(s) are allowed to execute which signal handlers at signal handler
> registration time and whether they are executed by only one of those threads or
> by all of those threads.  Not semantics I expect most people are used to because
> I'm not aware of any other language doing that.  But I don't see a compelling use
> case for implementing such complexity.

That's similar to what I imagined, based on how signals and posix
threads interact. Likewise I consider it not nearly worth doing. :)

> Maybe something like that would make sense for subinterpreter delegation only?
> I'm not sure.  I'd start without signals at all in subinterpreters before making such
> a decision.
>
> Python keeping signals simple has long been cited as a feature of the VM.

Exactly.  For now I was planning on keeping signals main-thread-only
(consequently main-interpreter-only).  There's the possibility we
could support per-interpreter signal handlers, but I don't plan on
exploring that idea until well after the more important stuff is
finished.

-eric


More information about the Python-Dev mailing list