深入理解python中的atexit模块


Posted in Python onMarch 07, 2017

atexit 模块介绍

python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数在解释器正常终止时自动执行,一般用来做一些资源清理的操作。 atexit 按注册的相反顺序执行这些函数; 例如注册A、B、C,在解释器终止时按顺序C,B,A运行。

Note:如果程序是非正常crash,或者通过os._exit()退出,注册的退出函数将不会被调用。

官方文档:https://docs.python.org/3.5/library/atexit.html

注册 退出函数

atexit.register(func, *args, **kargs)

将func作为要在终止时执行的函数。任何要传递给func的可选参数必须作为参数传递给register() 。可以多次注册相同的函数和参数。

当程序退出的时候,按先进后出的顺序调用注册的函数。如果退出函数在执行过程中抛出了异常,atexit会打印异常的信息,并继续执行下一下回调,直到所有退出函数执行完毕,它会重新抛出最后接收到的异常。

示例

通过装饰器的方式:

#!/usr/bin/env python
from atexit import register
def main():
 print('Do something.')
@register
def _atexit():
 print('Done.')
if __name__ == '__main__':
 main()

非装饰器的方式:

#!/usr/bin/env python
from atexit import register
def main():
 #pass
 print('XX')
def goodbye(name, adjective):
 print('Goodbye, %s, it was %s to meet you.' % (name, adjective))
 
register(goodbye, 'Donny', 'nice')
# or:
# register(goodbye, adjective='nice', name='Donny')
if __name__ == '__main__':
 main()

删除退出函数[一般用不到]

> atexit.unregister(func)
>

从解释器关闭时运行的函数列表中删除func。 调用unregister()后,当解释器关闭时,即使它被注册了多次,func也不会被调用。如果func没有注册过的话,则unregister()什么也不会做。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python执行时间的计算方法小结
Mar 17 Python
Python标准库之itertools库的使用方法
Sep 07 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python写日志文件操作类与应用示例
Jul 01 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
python文件及目录操作代码汇总
Jul 08 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 Python
Python 备份程序代码实现
Mar 06 #Python
Python与Java间Socket通信实例代码
Mar 06 #Python
python使用arcpy.mapping模块批量出图
Mar 06 #Python
python与php实现分割文件代码
Mar 06 #Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 #Python
windows下安装Python和pip终极图文教程
Mar 05 #Python
python爬虫的工作原理
Mar 05 #Python
You might like
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
杏林同学录(八)
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
js实现简单页面全屏
2019/09/17 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
Python break语句详解
2014/03/11 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python多进程原理与用法分析
2018/08/21 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
介绍Java的内部类
2012/10/27 面试题
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
NULL是什么,它是怎么定义的
2015/05/09 面试题
毕业生自荐信如何写
2014/03/24 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
党风廉正建设责任书
2015/01/29 职场文书
资料员岗位职责
2015/02/10 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL