深入理解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 相关文章推荐
关于Python如何避免循环导入问题详解
Sep 14 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
python中的global关键字的使用方法
Aug 20 Python
pytorch 归一化与反归一化实例
Dec 31 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
keras中的backend.clip用法
May 22 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 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
基于php无限分类的深入理解
2013/06/02 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
用jquery来定位
2007/02/20 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
详解Python传入参数的几种方法
2019/05/16 Python
Python socket处理client连接过程解析
2020/03/18 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
护理自荐信范文
2013/10/05 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
《学会待客》教学反思
2014/02/22 职场文书
师德演讲稿范文
2014/05/06 职场文书
总经理检讨书
2014/09/15 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python