深入理解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 相关文章推荐
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
pytorch 实现打印模型的参数值
Dec 30 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
tensorflow模型转ncnn的操作方式
May 25 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
TensorFlow的自动求导原理分析
May 26 Python
浅谈Python数学建模之数据导入
Jun 23 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
消息持续发送的完整例子
2006/10/09 PHP
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
php防止sql注入简单分析
2015/03/18 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
javascript倒计时功能实现代码
2012/06/07 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
解决vue点击控制单个样式的问题
2018/09/05 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
详解Python字典的操作
2019/03/04 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python如何给你的程序做性能测试
2020/07/29 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
师范生实习的个人自我鉴定
2013/10/20 职场文书
心得体会开头
2014/01/01 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
争做文明公民倡议书
2014/08/29 职场文书
优秀护士事迹材料
2014/12/25 职场文书
护士心得体会范文
2016/01/25 职场文书