深入理解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中open()函数指定文件打开方式的用法
Jun 04 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
解决python文件双击运行秒退的问题
Jun 24 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
python实现批量文件重命名
Oct 31 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
python -v 报错问题的解决方法
Sep 15 Python
python 实现弹球游戏的示例代码
Nov 17 Python
Python超详细分步解析随机漫步
Mar 17 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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 date()日期时间函数详解
2010/05/16 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python子类继承父类构造函数详解
2019/02/19 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
Python grpc超时机制代码示例
2020/09/14 Python
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
vue项目实现分页效果
2021/03/24 Vue.js
材料专业毕业生求职信
2014/02/26 职场文书
行政处罚告知书
2015/07/01 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫