为什么使用threading.Event导致未捕获SIGTERM?

为什么使用threading.Event导致未捕获SIGTERM?,第1张

为什么使用threading.Event导致未捕获SIGTERM?

从有关信号的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系统上
不可用



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5617467.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存