深入理解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字典get()方法用法分析
Apr 17 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
python实现的config文件读写功能示例
Sep 24 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Python unittest装饰器实现原理及代码
Sep 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新手上路(十三)
2006/10/09 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
JS数组去重的6种方法完整实例
2018/12/08 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
python time模块用法实例详解
2014/09/11 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
先进个人评语大全
2015/01/04 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL