深入理解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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
python妹子图简单爬虫实例
Jul 07 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
python编辑用户登入界面的实现代码
Jul 16 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
一文详述 Python 中的 property 语法
Sep 01 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
python 邮件检测工具mmpi的使用
Jan 04 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
Python实现股市信息下载的方法
2015/06/15 Python
python日期相关操作实例小结
2019/06/24 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
python实现微信打飞机游戏
2020/03/24 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
《月迹》教学反思
2014/02/19 职场文书
2014组织生活会方案
2014/05/19 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
公司管理建议书
2015/09/14 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS