前言

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

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

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

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

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

import atexitdef exit0(*args, **kwarg):print 'exit0'for arg in args:print ' ' * 4, argfor item in kwarg.items():print ' ' * 4, itemdef 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的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

素材来源于网络: 侵删

atexit函数的执行顺序_Python模块学习:atexit相关推荐

  1. atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  2. Execution Order of Event Functions, unity 3d 事件函数的执行顺序

    vs_Community.exe --layout "F:\linson\vs2017 comm\offline" --lang zh-CN 学习unity3d,感觉事件顺序很重要 ...

  3. vue中父子组件先后渲染_vue父子组件钩子函数的执行顺序

    加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount-& ...

  4. python多个装饰器执行顺序_Python面试题之多个装饰器执行顺序

    疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会说明它们是自上而下的,比如下面这个例子:def decorator_a(func): print 'Get in decorator_a' def i ...

  5. m文件中函数的执行顺序

    当进行多个GUI协同工作时,要用到uiwait和uiresume函数.此时,理解函数的执行顺序此时是很关键的. 首先理解uiwait和uiresume函数的作用. uiwait函数:阻塞m文件的执行, ...

  6. Unity基础开发之事件函数的执行顺序

    Unity基础开发之事件函数的执行顺序 文章目录 前言 一.Initializtion阶段 Awake() OnEnable() 二.Editor阶段 Reset() OnValidate() 三.第 ...

  7. python函数执行顺序_python下for循环接if判断的函数执行顺序

    如题,程序第4行开始,for循环接if判断,之后的name=self._nic_ovs_name_pattern.search(o) 指的是if条件判断返回true才执行赋值操作吗?还是if返回Fal ...

  8. python函数参数定义顺序_Python函数定义-位置参数-返回值

    原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...

  9. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

最新文章

  1. ubuntu 如何正确的更换更新源
  2. 如何确定foreach循环中的第一次和最后一次迭代?
  3. %00截断攻击的探索
  4. Android 系统Dimension和间距参数详解
  5. String判断为空的方式
  6. Oracle数据库迁移-基础
  7. mysql的jdbc版本_【jdbc】Mysql 8版本jdbc设置
  8. C#在winform中页面跳转实现
  9. WPF MVVMLight框架安装
  10. 计算机所占比例的函数,(excel求百分比函数公式)excel所占比例怎么算
  11. 调用微信支付api实现用户扫描二维码支付订单
  12. 即时通讯IM 与系统集成
  13. 端口渗透——21端口FTP
  14. linux卸载lightdm,Ubuntu安装LightDM
  15. Matlab水果识别——基于形态学处理的水果识别
  16. 信息学奥赛辅导经验谈 问题教学法中的学生思维能力培养
  17. 小觅相机录制rosbag数据集
  18. cad2016中选择全图字体怎么操作_拿走不用谢!一分钟永久解决CAD字体乱码显示不全,早该知道了...
  19. markdown如何调整行距_Markdown编辑知乎文章的完全攻略
  20. 重磅报告 | 阿里研究院发布新网商五大预测_2020年诞生第一个机器人网商?

热门文章

  1. python 抽样函数_python中resample函数实现重采样和降采样代码
  2. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子
  3. ssm框架解读oracle,分页查询显示action的笔记SSM框架分页oracle数据库
  4. linux 内核4.12,Linux Kernel 4.12 发布,最新的稳定版内核
  5. css——常用选择器
  6. ISO9126软件质量模型
  7. Codeplus2017 12月赛——可做题1
  8. maven学习5 构建MyBatis项目
  9. 【spark系列3】spark开发简单指南
  10. Do you want to put on or loose weight?