py标准库之atexit 程序关闭回调

# -*- coding: utf-8 -*-
# 作者:新手
__author__ = ‘Administrator‘
#py标准库之atexit 程序关闭回调
import atexit
#用于在注册程序正常关闭时调用函数,sys模块还提供了一个hook,sys.exitfunc, 不过这里只能注册一个函数,aatexit注册表有多个模块和库同时使用
#例子1:通过 register()注册一个函数
def all_done():
    print ‘all_done()‘

print ‘registering‘
atexit.register(all_done)
print ‘registering‘
#由于种皮不做其他工作,会立即调用all_done()
#还可以注册多个函数,并向注册的函数传递参数,这对于妥善断开数据库连接,删除临时文件等是很有用处的,不用为需要翻译资源维护一个特殊列表,完全可以对每一个资源注册一个单独的清理函数
def clear1(name):
    print ‘clear(%s)‘%name
atexit.register(clear1,‘abc‘)
atexit.register(clear1,‘123‘)
atexit.register(clear1,‘two‘)
#退出函数会按注册的逆序来调用,这个方法以模块导入顺序(相应地,就是注册其atext函数顺序)的逆序完成模块清理,这样会减少依赖冲突

#什么样的情况下不调用atext函数
"""
满足以下任何一个条件,就一举动调用atext函数
1:程序由于一个信号而中止
2:直接被调用os._exit()
3:检测到解释器发生一个致命错误
"""
#1信号
import os,signal,subprocess,time,sys
proc=subprocess.Popen(r‘G:\project\x1.py‘)
print ‘parent: pausing before seding signal 1...‘
time.sleep(1)
print ‘parent: pausing before seding signal 2...‘
os.kill(proc.pid,signal.SIGTERM)
#子程序建议一个atext回调,然后休眠,直到信号到来
#2
def not_called():
    print ‘not called()‘
print ‘atexit handler‘
sys.stdout.flush()
atexit.register(not_called)
print ‘signal‘
sys.stdout.flush()
time.sleep(5)
#子程序不会打印嵌套在not_called()中的消息
#如果程序使用os._exit()就不会在调用atextit回调
def call():
    print ‘call()‘
print ‘registering‘
atexit.register(call)
print ‘register‘
print ‘exit....‘
os._exit(0)

#如果要确保回调运行,可以在语句外运行来执行或者调用 sys.exit()使程序中止
def donw():
    print ‘down()‘
print ‘registering‘
atexit.register(donw)
print ‘register‘
print ‘exit....‘
sys.exit()

#处理异常
#atexit回调中所产生的traceback会打印到控制台,最后产生异常会重新招聘,作为程序最后一个错误信息
def exit1(mess):
    raise  RuntimeError(mess)
atexit.register(exit1,‘one‘)
atexit.register(exit1,‘two‘)
#注册顺序会控制执行顺序,如果一个回调中某个错误引入另一个回调中一个错误(越先注册,越后调用),最后错误消息 可能并不是为用户显示最有用的错误信息

#官方标准库地址:https://docs.python.org/2.7/library/atexit.html?highlight=atexit#module-atexit

时间: 2024-10-11 02:57:05

py标准库之atexit 程序关闭回调的相关文章

Python:标准库(包含下载地址及书本目录)

下载地址 中文版(扫描版)请使用迅雷下载 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 文本1 1.1 string—文本常量和模板1 1.1.1 函数1 1.1.2 模板2 1.1.3 高级模板4 1.2 textwrap—格式化文本段落6 1.2.1 示例数据6 1.2.2 填充段落6 1.2.3 去除现有缩进7 1.2.4 结合dedent和fill7 1

c运行库、c标准库、windows API的区别和联系

C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的.  API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的. 区别他们之间区别是:API函数是针对操作系统的,C语言运行时函数则是针对C语言本身的. ·1.运行时库就是 C run-time library,是C而非C++语言世界的概念.     取这个名字就是因为你的C程序运行时需要这些库中的函数. ·2.C语言是所谓的“小内核”语言,就其语言本身来说很

(转)c运行库、c标准库、windows API的区别和联系

C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的.  API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的. 区别他们之间区别是:API函数是针对操作系统的,C语言运行时函数则是针对C语言本身的. ·1.运行时库就是 C run-time library,是C而非C++语言世界的概念.     取这个名字就是因为你的C程序运行时需要这些库中的函数. ·2.C语言是所谓的“小内核”语言,就其语言本身来说很

python标准库之sched 定时事件调度器

# -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#py标准库之schedimport timeimport sched#定时事件调度器#使用time来掌握当前时间,还有一个是延迟(delay)来指定一个时间段#调用time是不带任何参数的,返回当前一个时间数,delay要提供一个整数的参数,#有延迟运行事件"""4个方法1:表示延迟的数:2:优先级值:3:要调用的函数;4:函数参数的元组""

走进C++程序世界------IO标准库介绍

流概述 流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序员就可以使用它,流将负责处理所有的细节. IO类库 在C++输入?输出操作是通过C++系统提供的完成I/O操作的一组类实现的.主要包括: 标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流 文件流类:处理与磁盘文件关联的数据流 字符串流类:利用内存中的字符数组处理数据的输入输出 异常类等:处理异常错误. 标准IO对象: 包含iostream类的C++程序启动时,将

Part12 异常处理 12.3标准库程序异常处理

标准异常类的继承关系 C++标准库各种异常类所代表的异常 标准异常类的基础 exception:标准程序库异常类的公共基类 logic_error表示可以在程序中被预先检测到的异常 如果小心地编写程序,这类异常能够避免 runtime_error表示难以被预先检测的异常 //例12-3 三角形面积计算 //编写一个计算三角形面积的函数,函数的参数为三角形三边边长a.b.c,可以用Heron公式计算: #include<iostream> #include<cmath> #inclu

使用标准库:文本查询程序

使用标准库:文本查询程序 class QueryResult { friend std::ostream& print(std::ostream&,cost QueryResult&); public: Queryresult(std::string s, std::shared_ptr<std::set<line_no>> p, std::shared_ptr<std::vector<std::string>>f): sought(

转:Python标准库(非常经典的各种模块介绍)

Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我们 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语