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中函数的参数传递
Jun 21 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
python生成n个元素的全组合方法
Nov 13 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
python调用外部程序的实操步骤
Mar 04 Python
Python shelve模块实现解析
Aug 28 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
Python设计密码强度校验程序
Jul 30 Python
TensorFlow的环境配置与安装方法
Feb 20 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 cli模式学习(PHP命令行模式)
2013/06/03 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
班组长安全生产职责
2013/12/16 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
生物制药自我鉴定
2014/01/25 职场文书
社会实践活动总结
2015/02/05 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
小学数学国培研修日志
2015/11/13 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
5道关于python基础 while循环练习题
2021/11/27 Python
Python经常使用的一些内置函数
2022/04/11 Python
vue动态绑定style样式
2022/04/20 Vue.js