首页 > 解决方案 > 如何正确处理用户在python中发送的多个SIGINT

问题描述

我有一个使用多线程的 python 程序,我想处理用户发送的意外信号,以便优雅地退出执行。

例如,在运行过程中,如果我收到“Cntrl+C”,我想指示所有子线程关闭(通过事件),一旦线程完成拆除,我会让程序退出。

基本上我发现这可以通过使用:

signal.signal(signal.SIGINT, MY-METHOD)

但是我注意到,如果我按下多个“Cntrl+c”,那么“MY-METHOD”将从头开始一遍又一遍地运行,这不好,因为在这种情况下我无法在拆除线程方面取得任何进展。

我想知道,处理用户在短时间内反复发送 SIGINT 的这种情况的最佳方法是什么。防止 MY-METHOD 从一开始就反复运行的最佳方法是什么?

标签: pythonmultithreadingsignals

解决方案


经过一些尝试,我发现以下内容对我有用:

#Define the initial signal handler
signal.signal(signal.SIGINT, signal_handler)

def signal_handler(sig,frame):
    #Define a new handler to ignore any SIGINT
    signal.signal(signal.SIGINT, signal.SIG_IGN)
    < handler code afterwards >

推荐阅读