signal 的回调函数, 需要两个参数:signum 和 frame

signum 的 type 是一个 int

frame 的 type 是什么呢?

frame 的 type 是 frame class

frame class 在哪里?是内建的

怎么 import 后加注释?无法导入,但是 python 在 types 中提供了 FrameType 来给我们做 typing hint

import signal
import os
from loguru import logger
import time
from types import FrameType

def shutdown(signum: int, frame: FrameType):
    try:
        logger.debug(signum)
        logger.debug(type(signum))
        logger.debug(frame)
        logger.debug(type(frame))
        logger.debug('没了')

        assert isinstance(frame, FrameType)
    finally:
        exit(0)


signal.signal(signal.SIGTERM, shutdown)
signal.signal(signal.SIGINT, shutdown)


while True:
    time.sleep(1)

输出如下:

^C2022-09-24 13:20:33.687 | DEBUG    | __main__:shutdown:9 - 2
2022-09-24 13:20:33.687 | DEBUG    | __main__:shutdown:10 - <class 'int'>
2022-09-24 13:20:33.687 | DEBUG    | __main__:shutdown:11 - <frame at 0x7f56f1111a40, file '/home/bot/Desktop/ideaboom/011.py', line 25, code <module>>
2022-09-24 13:20:33.687 | DEBUG    | __main__:shutdown:12 - <class 'frame'>
2022-09-24 13:20:33.688 | DEBUG    | __main__:shutdown:13 - 没了

universe_king
3.4k 声望680 粉丝