python类中使用signal

环境: python 3.9

背景: 如果我们需要在类实例退出的时候进行一些处理,通常,我们可以将会处理逻辑写在**__del__**函数中, 类实例销毁的之前会调用该函数。

但是如果是外部信号signal,如 ctrl+c, 中断程序时, 就不会掉用__del__函数。
因此, 本次将在类中加入signal 处理逻辑。

具体示例代码如下:

import signal
import time
import os

class 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 程序。

你可能感兴趣的:(python,爬虫,python,开发语言)