5.11 在程序退出前执行代码的技巧¶
使用 atexit 这个内置模块,可以很方便地注册退出函数。
不管你在哪个地方导致程序崩溃,都会执行那些你注册过的函数。
示例如下
如果clean()
函数有参数,那么你可以不用装饰器,而是直接调用atexit.register(clean_1, 参数1, 参数2, 参数3='xxx')
。
可能你有其他方法可以处理这种需求,但肯定比不上使用 atexit 来得优雅,来得方便,并且它很容易扩展。
但是使用 atexit 仍然有一些局限性,比如:
如果程序是被你没有处理过的系统信号杀死的,那么注册的函数无法正常执行。
如果发生了严重的 Python 内部错误,你注册的函数无法正常执行。
如果你手动调用了
os._exit()
,你注册的函数无法正常执行。