Python 信号处理中调用 print 安全吗?
Is it safe to call print in a Python signal handler?
很多人以为 Python 的信号处理机制比 C 语言更安全,因为解释器会在状态一致时才调用用户代码。但事实并非如此简单。Python 的信号处理程序具有意外的可重入性:如果一个信号在另一个信号处理程序执行期间到达,它可能会再次被调用。我在极端测试中发现,如果在信号处理程序中调用 print,当快速连续触发信号时,程序会因重入调用而崩溃,抛出 RuntimeError。虽然这种情况在真实应用中极难复现,且崩溃比 C 语言中可能出现的死锁或数据损坏要好得多,但这仍提醒我们:在信号处理程序中应避免执行非平凡操作。
即使在极端情况下,在 Python 信号处理程序中调用 print 也可能导致程序崩溃。