深入理解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编程中用close()方法关闭文件的教程
May 24 Python
Python循环语句之break与continue的用法
Oct 14 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
Python I/O与进程的详细讲解
Mar 08 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
python批量图片处理简单示例
Aug 06 Python
Python字符串格式化输出代码实例
Nov 22 Python
Python实现密码薄文件读写操作
Dec 16 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
简单的Python人脸识别系统
Jul 14 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中的integer类型使用分析
2010/07/27 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
php分页查询的简单实现代码
2017/03/14 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
Express的路由详解
2015/12/10 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
对Python中range()函数和list的比较
2018/04/19 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
外贸会计专业自荐信
2014/06/22 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Python编写冷笑话生成器
2022/04/20 Python
小程序自定义轮播图圆点组件
2022/06/25 Javascript
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript