深入理解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文件和目录操作函数小结
Jul 11 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
python操作日志的封装方法(两种方法)
May 23 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
python3图片文件批量重命名处理
Oct 31 Python
python导入库的具体方法
Jun 18 Python
python安装后的目录在哪里
Jun 21 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
Python基础之元组与文件知识总结
May 19 Python
分享提高 Python 代码的可读性的技巧
Mar 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下保存远程图片到本地的办法
2010/08/08 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
分享php多功能图片处理类
2016/05/15 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
javascript中this指向详解
2016/04/23 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Python编写登陆接口的方法
2017/07/10 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python实现分段线性插值
2018/12/17 Python
Python实现验证码识别
2020/06/15 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
人事主管岗位职责范本
2013/12/04 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
欢迎领导标语
2014/06/27 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
付款证明格式范文
2015/06/19 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
岗位聘任协议书
2015/09/21 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL