深入理解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实现随机密码字典生成器示例
Apr 09 Python
常用python编程模板汇总
Feb 12 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
python挖矿算力测试程序详解
Jul 03 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
python如何实现word批量转HTML
Sep 30 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
python wsgiref源码解析
Feb 06 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入门小知识
2008/03/24 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python实现的发邮件功能示例
2019/09/11 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
python 装饰器的基本使用
2021/01/13 Python
小区门卫岗位职责
2013/12/31 职场文书
师德演讲稿范文
2014/05/06 职场文书
承诺书格式范文
2014/06/03 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
如何使用pdb进行Python调试
2021/06/30 Python