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的轻便web框架Bottle
Apr 08 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
利用python求相邻数的方法示例
Aug 18 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
使用Python读取大文件的方法
Feb 11 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
详解Python的循环结构知识点
May 20 Python
新手入门Python编程的8个实用建议
Jul 12 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
详解python tkinter模块安装过程
Jan 06 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
php session应用实例 登录验证
2009/03/16 PHP
php 什么是PEAR?
2009/03/19 PHP
PHP可变函数的使用详解
2013/06/14 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
一套PHP的笔试题
2013/05/31 面试题
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
个人简历自我评价
2014/01/06 职场文书
委托公证书
2014/04/08 职场文书
主要领导对照检查材料
2014/08/26 职场文书
财务部会计岗位职责
2015/02/03 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL