Is it safe to call print in a Python signal handler?

(iafisher.com)

29 points | by hellerve 3 days ago

8 comments

  • jrumbut 26 minutes ago
    I think the author undersells the significance of this. I could easily picture someone writing code that boils down to the example, all it requires is a flood of signals and a print statement.

    If your program generates signals, it could generate a flood unintentionally. If you put a print statement in the handler, you can get this result.

    It's not terribly surprising, but good to know.

  • nine_k 58 minutes ago
    POSIX signals are broken by design, alas: https://lwn.net/Articles/414618/

    Python or not, almost nothing is safe inside a signal handler.

    • inigyou 14 minutes ago
      Certain signals are true user-mode interrupts, like SIGTERM and some of the ones glibc uses to implement pthreads.

      The ones related to application logic must only be handled with signalfd if you want any semblance of reliability.

    • knome 44 minutes ago
      the first line of the article points out that python isn't run in the POSIX C handler. that just sets a flag for the interpreter to act on. the python issue is an unsafe re-entrant handling strategy in the interpreter.
  • IgorPartola 3 hours ago
    What’s really fun is mixing signal handling and threads, especially on Linux. There is a simple way to do it and about a thousand ways that include at least one gotcha.
    • zbentley 35 minutes ago
      What’s the simple way? Self-pipe?
  • charcircuit 34 minutes ago
    I don't understand how this is still a problem in 2026. Signals should just come in via a new thread and it would solve all the complexity around them. Everyone has known the current way it works is extremely limited in what you can safely do. This whole pause the execution of what's currently running and then run some extra code somewhere else turned out to not be a good idea.
    • inigyou 13 minutes ago
      They should come in via signalfd unless they're the moral equivalent of a non-maskable interrupt.
  • megagpt3 2 hours ago
    He considers it safe if it's unlikely to crash? That's also true in C. Calling printf in a C signal handler is likely to work. So why does he consider it important in C but "not a practical consideration" in Python? It's more likely to crash in Python than in C because the signal handler takes longer to execute.
  • Uptrenda 1 hour ago
    And when you combine it with event loops and multiple OSes + python versions it gets even more difficult. Don't get me wrong: I love python, but shut down / cleanup is kind of a pain in the ass. If someone built a (good) lib for this it would probably be quite popular.
  • fenestella 16 minutes ago
    [flagged]