python atexit模块的使用
模块的简介
atexit模块主要的作用就是在程序即将结束之前执行的代码,atexit模块使用register函数用于注册程序退出时的回调函数,然后在回调函数中做一些资源清理的操作。该模块其实是一个对 sys.exitfunc
钩子( hook )的简单封装
ipm中在应用退出时释放文件锁。
简单使用:
import atexit
import time
def run():
print("apply is run ...")
def clear():
print("clear...")
print("waiting...")
atexit.register(run)
atexit.register(run)
time.sleep(2)
@atexit.register
def between():
print("wait>>>")
atexit有两个方法,regiest和unregiest,顾名思义,一个是注册,一个是注销,注册函数有点类似栈的原理,后进先出,例如注册A,B,C则程序结束执行顺序为C,B,A.
应用场景:在跑脚本出问题后清理环境相关的代码,在代码异常的情况退出都可将重要文件保存。
import atexit
@atexit.register
def clean():
print('清理环境相关的代码')
def test():
example = {"a": 1, "b": 2}
print(example["c"])#程序报错
test()
如果说是程序是认为调用退出或者是kill掉进程,则atexit注册的函数不会被调用,那么就要使用signle来解决这个问题
import signal
def handle_exit():
print('sys.exit...')
start()
atexit.register(handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)
在多进程中,程序结束不会执行atexit