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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值