深入理解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运算π的值深入Python中科学计算的实现
Apr 17 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
python连接字符串的方法小结
Jul 13 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
Python操作json的方法实例分析
Dec 06 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 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
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python赋值语句后逗号的作用分析
2015/06/08 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
python实现简单文件读写函数
2021/02/25 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
给酒店员工的表扬信
2014/01/11 职场文书
搞笑获奖感言
2014/01/30 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
建筑管理专业求职信
2014/07/28 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
临时用工协议书范本
2014/10/29 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android