Llamar a print en un manejador de señales de Python puede estrellar tu programa

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

En este artículo, el autor investiga si es seguro llamar a print dentro de un manejador de señales en Python. Aunque CPython difiere la ejecución del manejador hasta que el intérprete está en un estado consistente, los manejadores de señales de Python son inesperadamente reentrantes. Una ráfaga rápida de señales puede provocar una llamada reentrante a print que cause una excepción RuntimeError y, en casos extremos, bloquee el programa. El autor concluye que, aunque es un riesgo teórico, en la práctica es poco probable que ocurra, pero recomienda evitar trabajo no trivial en manejadores de señales.

El programa de prueba muestra que, en circunstancias extremas, llamar a print en un manejador de señales puede hacer que tu programa se bloquee.
  1. nine_k

    Las señales POSIX están rotas por diseño, lamentablemente: https://lwn.net/Articles/414618/

    Python o no, casi nada es seguro dentro de un manejador de señales.

  2. IgorPartola

    Lo realmente divertido es mezclar el manejo de señales con hilos, especialmente en Linux. Hay una forma simple de hacerlo y alrededor de mil formas que incluyen al menos una trampa.

  3. jrumbut

    Creo que el autor subestima la importancia de esto. Fácilmente podría imaginar a alguien escribiendo código que se reduce al ejemplo; todo lo que requiere es una avalancha de señales y una declaración de print.

    Si tu programa genera señales, podría generar una avalancha sin intención. Si pones una declaración de print en el manejador, puedes obtener este resultado.

    No es terriblemente sorprendente, pero es bueno saberlo.

Más de este día

2026-08-30