环境: python 3.9
背景: 如果我们需要在类实例退出的时候进行一些处理,通常,我们可以将会处理逻辑写在**__del__**函数中, 类实例销毁的之前会调用该函数。
但是如果是外部信号signal,如 ctrl+c, 中断程序时, 就不会掉用__del__函数。
因此, 本次将在类中加入signal 处理逻辑。
具体示例代码如下:
import signal
import time
import osclass Spider(object):def __init__(self):signal.signal(signal.SIGINT, self.quit)def quit(self, signum, frame):print("quit...")os._exit(0)def __del__(self):print("__del__...")def run(self):# 执行了逻辑while 1:print("loop...")time.sleep(3)if __name__ == "__main__":spider = Spider()spider.run()
signal.signal(signalnum, handler)
- signalnum:具体信号
- handler:信号的执行函数
handler 必须要接收两个参数, 可以设置执行默认操作,也可以自定义操作。那如果想忽略信号的话,也可以有两种操作方法:
- 直接在handler的函数体中写一个pass
- 设置signal.SIG_DFL(默认执行)、signal.SIG_IGN(程序忽略该信号。
os._exit(0) : 正常退出python 程序。