atexit模块定义了一个单一的函数来注册清除函数。这样注册的函数在正常解释器终止时自动执行。 atexit以它们注册的相反顺序运行这些函数;如果您注册A,B和C,在解释器终止时,它们将按顺序C,B,A运行。
注意:当检测到Python致命内部错误或者调用os._exit()时,如果程序被未处理的信号杀死,则不会调用通过此模块注册的函数。
这是sys.exitfunc()变量提供的功能的替代接口。
注意:当与设置sys.exitfunc的其他代码一起使用时,此模块不太可能正常工作。特别是,其他核心的Python模块可以免费使用atexit,没有程序员的知识。使用sys.exitfunc的作者应该将其代码转换为使用atexit。转换设置sys.exitfunc的代码的最简单的方法是导入atexit并注册已绑定到sys.exitfunc的函数。
atexit.register(func [,* args [,** kargs]])
将func作为要在终止时执行的函数。任何要传递给func的可选参数必须作为参数传递给register()。可以多次注册相同的函数和参数。
在正常的程序终止(例如,如果sys.exit()被调用或主模块的执行完成),所有注册的函数以最后进先出的顺序调用。假设较低级别模块通常在较高级别模块之前导入,因此必须以后进行清理。
如果在执行退出处理程序期间引发异常,将打印回溯(除非引发SystemExit),并保存异常信息。在所有退出处理程序有机会运行后,最后一个异常被提出是重新提出。
注意:当检测到Python致命内部错误或者调用os._exit()时,如果程序被未处理的信号杀死,则不会调用通过此模块注册的函数。
这是sys.exitfunc()变量提供的功能的替代接口。
注意:当与设置sys.exitfunc的其他代码一起使用时,此模块不太可能正常工作。特别是,其他核心的Python模块可以免费使用atexit,没有程序员的知识。使用sys.exitfunc的作者应该将其代码转换为使用atexit。转换设置sys.exitfunc的代码的最简单的方法是导入atexit并注册已绑定到sys.exitfunc的函数。
atexit.register(func [,* args [,** kargs]])
将func作为要在终止时执行的函数。任何要传递给func的可选参数必须作为参数传递给register()。可以多次注册相同的函数和参数。
在正常的程序终止(例如,如果sys.exit()被调用或主模块的执行完成),所有注册的函数以最后进先出的顺序调用。假设较低级别模块通常在较高级别模块之前导入,因此必须以后进行清理。
如果在执行退出处理程序期间引发异常,将打印回溯(除非引发SystemExit),并保存异常信息。在所有退出处理程序有机会运行后,最后一个异常被提出是重新提出。
在版本2.6中更改:此函数现在返回func,这使得它可以使用它作为装饰器。
以下简单示例演示了模块如何在导入时从文件初始化计数器,并在程序终止时自动保存计数器的更新值,而不依赖于在终止时明确调用该模块的应用程序。
位置和关键字参数也可以传递给register(),以便在调用时传递给注册函数:
用作装饰器:
来自:https://docs.python.org/2/library/atexit.html