17.4. signal—设置异步事件的处理程序

该模块提供了在 Python 中使用 signal 处理程序的机制。使用 signal 及其处理程序的一些一般规则:

signal模块中定义的变量是:

Availability: Windows.

2.7 版的新Function。

Availability: Windows.

2.7 版的新Function。

signal模块定义了一个 exception:

signal模块定义以下Function:

当间隔计时器触发时,signal 将发送到该进程。发送的 signal 取决于所使用的计时器。 signal.ITIMER_REAL将传送SIGALRMsignal.ITIMER_VIRTUAL发送SIGVTALRM,而signal.ITIMER_PROF将传送SIGPROF

旧值以 Tuples 形式返回:(延迟,间隔)。

trypass无效的间隔计时器将导致ItimerError。可用性:Unix。

2.6 版的新Function。

2.6 版的新Function。

返回旧的唤醒 fd(如果未启用文件 Descriptors 唤醒,则返回-1)。如果* fd 为-1,则禁用文件 Descriptors 唤醒。如果不为-1,则 fd 必须是非阻塞的。在调用 poll 或再次选择之前,库必须从 fd *中删除任何字节。

启用线程后,只能从主线程调用此函数;try从其他线程调用它会引发ValueError异常。

2.6 版的新Function。

请注意,使用signal()安装 signal 处理程序将pass为给定 signal 隐式调用具有真实* flag *值的siginterrupt()将重启行为重置为可break的。

2.6 版的新Function。

启用线程后,只能从主线程调用此函数;try从其他线程调用它会引发ValueError异常。

使用两个参数调用* handler *:signal 编号和当前堆栈帧(None或帧对象;有关帧对象的说明,请参见类型层次结构中的描述或在inspect模块中查看属性说明)。

在 Windows 上,只能使用SIGABRTSIGFPESIGILLSIGINTSIGSEGVSIGTERM来调用signal()。在任何其他情况下,都将引发ValueError

17.4.1. Example

这是一个最小的示例程序。它使用alarm()函数来限制 await 打开文件所花费的时间;如果该文件用于可能无法打开的串行设备,这通常会导致os.open()无限期挂起,则这很有用。解决的办法是在打开文件之前设置 5 秒警报。如果操作时间太长,则会发送警报 signal,并且处理程序会引发异常。

import signal, os

def handler(signum, frame):
    print 'Signal handler called with signal', signum
    raise IOError("Couldn't open device!")

# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)

# This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR)

signal.alarm(0)          # Disable the alarm
首页