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简单删除目录下文件以及文件夹的方法
May 27 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python将图片转base64,实现前端显示
Jan 09 Python
python3下pygame如何实现显示中文
Jan 11 Python
Python urllib2运行过程原理解析
Jun 04 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
python入门之算法学习
Apr 22 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
轻松修复Discuz!数据库
2008/05/03 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
理解AngularJs指令
2015/12/10 Javascript
浅析Jquery操作select
2016/12/13 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
Djang中静态文件配置方法
2015/07/30 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
python suds访问webservice服务实现
2020/06/26 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
美国渔具店:FishUSA
2019/08/07 全球购物
材料采购员岗位职责
2013/12/17 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
终止劳动合同协议书
2014/10/05 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
学校节水倡议书
2015/04/29 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA