Python信号处理

时间:2020-02-23 14:43:19  来源:igfitidea点击:

欢迎使用python信号处理教程。
这将是关于如何使用python处理信号的非常基础的程序。
计算机借助信号来接收和发送各种命令。
操作系统针对其编程要接收或者生成的每种类型的命令,至少列出了一个信号。
现在,我们将研究python 3中的基本信号处理。

什么是信号

信号就像事件的通知。
当系统中发生事件时,会生成一个信号以通知其他程序有关该事件的信息。
例如,如果您按Ctrl + c,则会生成一个名为SIGINT的信号,并且任何程序实际上都可以通过简单地读取该信号来了解该事件。
信号由整数标识。

Python信号处理

python中几乎所有基本的信号处理操作都需要Python信号模块。

要了解python信号处理的工作原理,我们需要了解"信号处理程序"。
信号处理程序是一项任务或者程序,在检测到特定信号时执行。
处理程序采用两个参数,即信号编号和帧。

您可以只在处理程序中打印一行,也可以响应该信号启动其他任务。
signal.signal()函数将处理程序分配给信号。
现在,无需进一步讨论,我们来看一个例子。

Python信号示例

以下示例显示了如何对系统进行编程以响应SIGINT信号。

import signal  
import time  

def handler(a, b):  # define the handler  
  print("Signal Number:", a, " Frame: ", b)  

signal.signal(signal.SIGINT, handler)  # assign the handler to the signal SIGINT  

while 1:  
  print("Press ctrl + c")  # wait for SIGINT  
  time.sleep(10)

第1行和第2行导入要在程序中使用的信号和时间模块。

信号处理程序在第5至6行中定义。
它输出信号的整数值以及它与信号一起接收的帧。

第8行使用signal.signal()函数将处理程序分配给信号SIGINT。
这意味着每次CPU拾取" ctrl + c"信号时,都会调用函数处理程序。

编写第10至12行以使程序无限期运行。

要执行该程序,请将代码另存为python_signal.py并在同一文件夹中打开命令窗口。
然后在命令窗口中运行命令" python python_signal.py"。
该程序应在那时运行。
现在按" ctrl + c"获得以下结果。
您可以通过简单地关闭命令窗口或者按" ctrl + z"来终止程序。

下图显示了以上python信号处理示例产生的输出。

Python信号警报

让我们来看另一个示例,以演示SIGALARM信号的使用。

import signal  
import time  

def alarm_handler(signum, stack):  
  print('Alarm at:', time.ctime())  

signal.signal(signal.SIGALRM, alarm_handler)  # assign alarm_handler to SIGALARM  
signal.alarm(4)  # set alarm after 4 seconds  
print('Current time:', time.ctime())  
time.sleep(6)  # make sufficient delay for the alarm to happen

上面的python警报信号程序产生以下输出。

在此示例中,值得注意的是,在第12行进行了延迟,以使程序不会在警报时间之前终止。
警报将在4秒后设置(第10行),并且alarm_handler会执行警报必须执行的操作。

Python信号处理总结

必须记住,每个操作系统的信号都不相同。
有些信号在所有操作系统中都有效,而另一些则不能。
在使用线程时,只有进程的主线程才能接收信号。
这样就可以处理python信号了。