python代码直接关机_关机信号在python脚本中运行代码

本文探讨了如何在Python中使用SIGTERM信号时避免程序无响应,通过结合信号处理函数和atexit,实现程序在接收到终止信号时执行清理操作并优雅退出。重点讲解了信号注册、函数签名修改及sys.exit()的使用方法。
摘要由CSDN通过智能技术生成

shutdown发送SIGTERM信号,atexit无法处理.背景管理者也不会,最后是块等.

import signal

signal.getsignal(signal.SIGTERM)

Out[64]: 0 #i.e. nothing

与此对比,比如ctrl-C:

signal.getsignal(signal.SIGINT)

Out[65]: #i.e. something

你可以用信号注册你的byebye函数来运行而不是什么都不做(这会导致解释器最终被shell杀死)

signal.signal(signal.SIGTERM,byebye)

如果你这样做,你需要做两件事:

>更改byebye的签名以接受信号将传递给它的两个参数.

>你应该做一些事情,比如在你的byebye函数结束时调用sys.exit()以允许python优雅地关闭商店.

你也可以做一些信号和atexit的组合:

import sys

signal.signal(signal.SIGTERM, lambda num, frame: sys.exit(0))

哪个会直接进入您当前的代码.这样可以确保清理操作的原子性(即byebye保证是最后的I / O操作),但代价是有点笨重.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值