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读取Android permission文件
Nov 01 Python
使用python装饰器验证配置文件示例
Feb 24 Python
Python中list初始化方法示例
Sep 18 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
Python实现Pig Latin小游戏实例代码
Feb 02 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
Python内置的数据类型及使用方法
Apr 13 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
图形数字验证代码
2006/10/09 PHP
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python中map()与zip()操作方法
2016/02/27 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python 多个参数不为空校验方法
2019/02/14 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python解析xml简单示例
2019/06/21 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
python实现无边框进度条的实例代码
2020/12/30 Python
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
中学生差生评语
2014/01/30 职场文书
升国旗演讲稿
2014/09/05 职场文书
骨干教师个人总结
2015/02/11 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android