python atexit模块的使用

2023-11-03

python atexit模块的使用

模块的简介

atexit模块主要的作用就是在程序即将结束之前执行的代码,atexit模块使用register函数用于注册程序退出时的回调函数,然后在回调函数中做一些资源清理的操作。该模块其实是一个对 sys.exitfunc 钩子( hook )的简单封装

ipm中在应用退出时释放文件锁。

简单使用:
import atexit
import time

def run():
    print("apply is run ...")

def clear():
    print("clear...")

print("waiting...")
atexit.register(run)
atexit.register(run)
time.sleep(2)

@atexit.register
def between():
    print("wait>>>")

atexit有两个方法,regiest和unregiest,顾名思义,一个是注册,一个是注销,注册函数有点类似栈的原理,后进先出,例如注册A,B,C则程序结束执行顺序为C,B,A.

应用场景:在跑脚本出问题后清理环境相关的代码,在代码异常的情况退出都可将重要文件保存。

import atexit
 
@atexit.register
def clean():
   print('清理环境相关的代码')
 
def test():
   example = {"a": 1, "b": 2}
   print(example["c"])#程序报错
test()

如果说是程序是认为调用退出或者是kill掉进程,则atexit注册的函数不会被调用,那么就要使用signle来解决这个问题

import signal

def handle_exit():
    print('sys.exit...')
    start()

atexit.register(handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)

在多进程中,程序结束不会执行atexit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python atexit模块的使用 的相关文章

随机推荐

  • mysql中索引的null值问题

    在mysql中 对含有null值的索引列 以及is null is not null的查询条件是否会走索引这点 网上有很多说法 为此我自己单独做了个实验 首先创建两张表 一张表所有字段默认为null 另一张表所有字段默认为not null
  • QWidget(长文)

    一 描述 1 QWidget 是用户界面的原子 它从窗口系统接收鼠标 键盘和其他事件 并在屏幕上绘制自己的表示 每个小部件都是矩形的 它们按Z顺序排序 小部件由其父部件和它前面的小部件剪裁 2 未嵌入父窗口小部件的 QWidget 称为窗口
  • springboot发布dubbo服务注册到nacos

    目录 dubbo注册服务到nacos的pom依赖 使用dubbo发布rest服务报错 解决403 unknown user错误 如何把dubbo服务注册到nacos指定的命名空间 dubbo消费端 dubbo发布rest服务 启动报错 解决
  • 集合Set和List相互转换

    import java util public class Set3 public static void main String args Random rand new Random red 6 1 33 Set
  • 谷歌带来Cloud Spanner更新:查询自省、新可用区域和多区域配置

    在最近的一篇博文中 谷歌宣布了Cloud Spanner 一个全局分布式NewSQL数据库 的一些增强功能 谷歌基于用户要求进行了更新 带来了查询自省改进 新可用区域和新的多区域配置 谷歌Cloud Spanner是一种将关系数据库结构优势
  • 软件测试学习心得-3

    静态技术 一 静态技术与测试过程 静态测试和动态测试的区别 二 评审 正式评审过程 角色与职责 评审类型 三 静态分析和工具支持 编译器分析工具 规范标准一致性 数据流分析 控制流分析 圈复杂度 一 静态技术与测试过程 静态测试不以测试数据
  • 输入一维数组字符串,在输入一个字符串,获取字符串中,相同的字符,并且把相同的字符串输出

    package com qf day6 import java util Arrays public class Test5 public static void main String args String Names zs zl zs
  • laravel 学习记录

    1 安装 apache php mysql linux下安装lnmp lamp windows下可以安装xampp 2 安装composer 3 命令行下 转到网站目录后 执行下面的命令 composer create project la
  • 升级vim到8.2以及配置vimrc

    liuzhicheng Huaqin sudo add apt repository ppa jonathonf vim Unofficial package for Vim Packaging files are based on lat
  • 关于PCB模拟地和数字地的处理

    在PCB布线时板子上可能有几个地的情况 比较差的傻瓜式做法就是直接铺铜 这种对于低速板或者对干扰不敏感的板子来讲还是没问题的 但是高速或者要求精密的板子就不可取 这时候就需要把模拟地和数字地隔离好 通常楼主的做法是把模拟的元器件和数电的元器
  • msys2中导入window环境变量

    配置环境变量 MSYS2 PATH TYPE inherit
  • 1、Ubuntu16.04编译安装llvm+clang

    Ubuntu16 04编译安装llvm clang 一 环境介绍 操作系统 Ubuntu 16 04 不是虚拟机哦 在虚拟机上做过无数次尝试 均以失败告终 LLVM Clang版本 3 6 Cmake版本 3 6 二 下载安装 1 下载源码
  • java评论功能怎么实现_评论功能的简单实现

    最近在写一个问答功能 类似于评论 几番找资料才有点感觉 主要是太菜了 为了加深印象就单独抽出来记下笔记 然后这篇写完就开始SpringBoot的复习了 1 说明 网上看到有三种类型的评论 按照笔者的理解记下了过程 可能理解错了 望大神指出
  • 哈希算法题(砝码&数量得到种数)

    现有n种砝码 重量互不相等 分别为 m1 m2 m3 mn 每种砝码对应的数量为 x1 x2 x3 xn 现在要用这些砝码去称物体的重量 放在同一侧 问能称出多少种不同的重量 注 称重重量包括 0 include
  • MySQL【DQL查询数据(最重点)】

    DQL查询数据 最重点 4 1 DQL Data Query LANGUAGE 数据查询语言 所有的查询操作都用它 Select 简单的查询 复杂的查询它都能做 数据库中最核心的语言 最重要的语句 使用频率最高的语句 4 2 指定查询字段
  • HTML、CSS、JavaScript:网页开发的三大利器

    JavaScript 让网页更加生动有趣 JavaScript是一种广泛应用于网页开发的编程语言 它可以让网页更加生动有趣 在本文中 我们将介绍JavaScript的基本概念和应用 帮助读者更好地了解这个强大的编程语言 JavaScript
  • 一文读懂高速互联的阻抗及反射(中)

    一文读懂高速互联的阻抗及反射 中 勘误 上篇中 电感的电抗叫做感抗 表示为 X L j C
  • 2017网易游戏测试工程师-实习招聘在线笔试题

    网易游戏测试工程师 一 A游戏又要开新服了 为了在短时间内冲排名 你得尽可能多地完成游戏任务 通过事先查攻略我们知道了所有的游戏任务 以及每个任务的时间窗口 一旦选定了做某个任务 在所选定任务的整个持续时间内只能做这个任务 且只能等到当前任
  • SpringBoot整合多数据源Redis

    SpringBoot整合Redis 其实方法跟单数据差不多的 这里给大家写一下 文章目录 SpringBoot整合Redis 多数据源整合 多数据源整合 一 完成配置文件 Spring配置 spring 资源信息 messages 国际化资
  • python atexit模块的使用

    python atexit模块的使用 模块的简介 atexit模块主要的作用就是在程序即将结束之前执行的代码 atexit模块使用register函数用于注册程序退出时的回调函数 然后在回调函数中做一些资源清理的操作 该模块其实是一个对 s