atexit 模块非常简单。它只定义了一个注册函数,用于在程序退出时注册回调函数。我们可以在这个回调函数中进行一些资源清理操作。
注意:如果程序异常崩溃或者通过os._exit()退出,注册的回调函数将不会被调用。
我们也可以通过sys.exitfunc来注册回调,但是通过它只能注册一个回调,并且不支持参数。因此,建议您使用atexit来注册回调函数。但千万不要在程序中同时使用这两个方法,否则通过atexit注册的回调可能无法正常调用。其实通过查看atexit的源码,你会发现它内部是通过sys.exitfunc来实现的。它首先将注册的回调函数放入列表中。当程序退出时,注册的回调函数按照先进后出的顺序被调用。打回来。如果回调函数在执行过程中抛出异常,atexit会打印异常文本信息并继续执行下一个回调,直到所有回调执行完毕,并且会重新抛出上次收到的异常。
如果您使用的python版本是2.6,您还可以使用装饰器语法来注册回调函数。
以下是atexit模块的使用示例:
导入atexit def exit0(*args, **kwarg): 打印“退出0” 对于 args 中的 arg: 打印'' * 4,arg 对于 kwarg.items() 中的项目: 打印 ' ' * 4,项目 def exit1(): 打印“退出1” 引发异常,'exit1' def exit2(): 打印“退出2” atexit.register(exit0, *[1, 2, 3], **{ "a": 1, "b": 2, }) atexit.注册(退出1) atexit.注册(退出2) @atexit.注册 def exit3(): 打印“退出3” 如果 __name__ == '__main__': 经过
以下是程序运行结果。您可以看到回调函数的执行顺序与注册顺序相反。