python信号
Posted clekz1lx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python信号相关的知识,希望对你有一定的参考价值。
信号(signal)-- 进程间通讯的一种方式,也可作为一种软件中断的方法。一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理。
简化术语,信号是一个事件,用于中断运行功能的执行。信号始终在主Python线程中执行。对于信号,这里不做详细介绍。
Python封装了操作系统的信号功能的库 singal 的库。singal 库可以使我们在python程序中中实现信号机制。
Python的信号处理#
首先需要了解Python为什么要提供 signal Library。信号库使我们能够使用信号处理程序,以便当接收信号时都可以执行自定义任务。
Mission:当接收到信号时执行信号处理方法
可以通过使用 signal.singal() 函数来实现此功能
Python对信号的处理#
通常情况下Python 信号处理程序总是会在主 Python 主解析器的主线程中执行,即使信号是在另一个线程中接收的。 这意味着信号不能被用作线程间通信的手段。 你可以改用 threading 模块中的同步原语。
Python信号处理流程,需要对信号处理程序(signal handling )简要说明。signal handling 是一个任务或程序,当检测到特定信号时,处理函数需要两个参数,即信号id signal number (Linux 中 1-64),与堆栈帧 frame。通过相应信号启动对应 signal handling ,signal.signal() 将为信号分配 处理函数。
如:当运行一个脚本时,取消,此时是捕获到一个信号,可以通过捕获信号方式对程序进行异步的优雅处理。通过将信号处理程序注册到应用程序中:
import signal
import time
def handler(a, b): # 定义一个signal handling
print("Signal Number:", a, " Frame: ", b)
signal.signal(signal.SIGINT, handler) # 将handle分配给对应信号
while True:
print("Press ctrl + c")
time.sleep(10)
如果不对对应信号进行捕获处理时,python将会抛出异常。
root@Seal:/mnt/d/pywork/signal# python signal.py
^CTraceback (most recent call last):
File "signal.py", line 3, in <module>
while True:
KeyboardInterrupt
信号枚举#
信号的表现为一个int,Python的信号库有对应的信号枚举成员
其中常用的一般有,
SIGINT control+c
SIGTERM 终止进程 软件终止信号
SIGKILL 终止进程 杀死进程
SIGALRM 超时
以上是关于python信号的主要内容,如果未能解决你的问题,请参考以下文章