Python中atexit模块的基本使用示例


Posted in Python onJuly 08, 2015

atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。

注:如果程序是非正常crash,或者通过os._exit()退出,注册的回调函数将不会被调用。

我们也可以通过sys.exitfunc来注册回调,但通过它只能注册一个回调,而且还不支持参数。所以建议大家使用atexit来注册回调函数。但千万不要在程序中同时使用这两种方式,否则通过atexit注册的回调可能不会被正常调用。其实通过查阅atexit的源码,你会发现原来它内部是通过sys.exitfunc来实现的,它先把注册的回调函数放到一个列表中,当程序退出的时候,按先进后出的顺序调用注册的回调。如果回调函数在执行过程中抛出了异常,atexit会打印异常的文字信息,并继续执行下一下回调,直到所有的回调都执行完毕,它会重新抛出最后接收到的异常。

如果使用的python版本是2.6,还可以用装饰器的语法来注册回调函数。

下面是一个例子,展示了atexit模块的使用:
 

import atexit
 
def exit0(*args, **kwarg):
  print 'exit0'
  for arg in args:
    print ' ' * 4, arg
 
  for item in kwarg.items():
    print ' ' * 4, item
 
def exit1():
  print 'exit1'
  raise Exception, 'exit1'
 
def exit2():
  print 'exit2'  
 
atexit.register(exit0, *[1, 2, 3], **{ "a": 1, "b": 2, })
atexit.register(exit1)
atexit.register(exit2)
 
@atexit.register
def exit3():
  print 'exit3'
 
if __name__ == '__main__':
  pass

下面是程序运行的结果,可以看到回调函数执行的顺序与它们被注册的顺序刚才相反。

Python中atexit模块的基本使用示例

Python 相关文章推荐
python中stdout输出不缓存的设置方法
May 29 Python
Python单例模式实例分析
Jan 14 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python键盘输入转换为列表的实例
Jun 23 Python
通过shell+python实现企业微信预警
Mar 07 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
浅析Python __name__ 是什么
Jul 07 Python
pytorch学习教程之自定义数据集
Nov 10 Python
使用Pytorch训练two-head网络的操作
May 28 Python
python登录豆瓣并发帖的方法
Jul 08 #Python
python发送HTTP请求的方法小结
Jul 08 #Python
python友情链接检查方法
Jul 08 #Python
Python抓取百度查询结果的方法
Jul 08 #Python
Python抓取淘宝下拉框关键词的方法
Jul 08 #Python
Python根据区号生成手机号码的方法
Jul 08 #Python
Python写入CSV文件的方法
Jul 08 #Python
You might like
php实现zip文件解压操作
2015/11/03 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
Python标准库defaultdict模块使用示例
2015/04/28 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
医药代表个人的求职信分享
2013/12/08 职场文书
公司董事长职责
2013/12/12 职场文书
《忆江南》教学反思
2014/04/07 职场文书
文明寄语大全
2014/04/11 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
宣传口号大全
2014/06/16 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
讲党性心得体会
2014/09/03 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2015年团支部工作总结
2015/04/03 职场文书
2015年城市管理工作总结
2015/05/23 职场文书