Python 捕捉Ctrl+C退出脚本程序

描述

当我们的脚本程序进入死循环或者卡在某个耗时操作,需要退出程序时,一般都是使用Ctrl+C来杀死进程,那么,如何在程序里进行这个操作呢?实际上,在命令行输入Ctrl+C的原理是触发了 SIGINT 信号,所以我们需要捕捉这个信号。

signal模块

使用signal模块开捕捉信号, 并使用sys的exit方法退出程序。

处理死循环

import signal
import sys
import time

def quit(signum, frame):
    sys.exit(0)

if __name__ == "__main__":
	## SIGINT 终止进程 中断进程
    signal.signal(signal.SIGINT, quit)
    ## signal.signal(signal.SIGTERM, quit)
    while True:
        time.sleep(1)

处理IO/耗时操作

不同于死循环,在单进程单线程的情况下,如果程序卡在某个IO操作或者耗时操作,Python无法捕捉到signal信号(得处理完当前任务才可以)。
这就需要多线程来处理问题,当然因为GIL的原因,这里的多线程也只是单核多线程。

import time
import signal
import sys
import threading

def quit(signum, frame):
    print("Bye!")
    sys.exit(0)

def work():
	time.sleep(99999)

def main():
    work_thread = threading.Thread(target=work)
    work_thread.daemon = True
    work_thread.start()
    signal.signal(signal.SIGINT, quit)
    print("Start Working")
    while True:
        time.sleep(1)   

if __name__ == "__main__":
	main()
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页