从有关信号的Python文档中:
尽管就Python用户而言,Python信号处理程序是异步调用的,但它们只能出现在Python解释器的“原子”指令之间。这意味着纯粹在C语言中执行的长计算期间到达的信号(例如,大文本正文中的正则表达式匹配)可能会延迟任意时间。
我测试了各种
threading和
thread类,但它们都没有按照您想要的方式工作-这可能是因为Python处理信号的方式。
signal但是,在中,有一个
pause()功能会休眠,直到该过程接收到信号为止。您修改后的示例如下所示:
import signalRUN = Truedef handle(a, b): global RUN print "handled" RUN = Falsesignal.signal(signal.SIGTERM, handle)signal.signal(signal.SIGINT, handle)signal.signal(signal.SIGHUP, handle)while RUN: signal.pause()print "Stopping"
我在Linux上检查了它,可以正常工作。如果您的应用程序不使用许多其他信号,我认为它不再归类为“轮询和睡眠”。
这是很好的手柄
SIGINT和
SIGHUP太,妥善处理用户中断(通常按
Ctrl+C)分别用户断开连接(关闭父终端)。
另外,请注意,该
signal.pause()功能在Windows系统上
不可用 。



