Python信号处理
欢迎使用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信号了。