python - 如何正确处理用户在python中发送的多个SIGINT
问题描述
我有一个使用多线程的 python 程序,我想处理用户发送的意外信号,以便优雅地退出执行。
例如,在运行过程中,如果我收到“Cntrl+C”,我想指示所有子线程关闭(通过事件),一旦线程完成拆除,我会让程序退出。
基本上我发现这可以通过使用:
signal.signal(signal.SIGINT, MY-METHOD)
但是我注意到,如果我按下多个“Cntrl+c”,那么“MY-METHOD”将从头开始一遍又一遍地运行,这不好,因为在这种情况下我无法在拆除线程方面取得任何进展。
我想知道,处理用户在短时间内反复发送 SIGINT 的这种情况的最佳方法是什么。防止 MY-METHOD 从一开始就反复运行的最佳方法是什么?
解决方案
经过一些尝试,我发现以下内容对我有用:
#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 >
推荐阅读
- yaml - 如何使用 openapi-generator 生成 API 文档?
- r - 比较具有相同列名和行名的两个数据框
- c# - 长 id 未正确转换
- objective-c - 如果我调用它的getter,为什么关联对象的弱属性不会被取消?
- three.js - Threejs:禁用某些对象的截锥体剔除
- java - Spring Bean 给出 NullPointerException 但不为空
- python - 在字符串之后生成随机数
- python-3.x - python sqlite3记录未使用占位符函数插入数据库
- tensorflow - 如何在我自己的 GCP VM 或 Jupterlab 实例中使用 TensorFlow Embeddings Projector?
- mysql - 在将数据添加到mysql数据库中的表之前检查