初级水平
我在 ubuntu 上使用 python 2.7 版本。
我对 python 中的一个小代码片段感到困惑。我知道python中的while True
是无限循环的意思。我有以下代码:
#!/usr/bin/env python
import signal
import time
def ctrlc_catcher(signum, frm):
print "Process can't be killed with ctrl-c!"
def alarm_catcher(signum,frame):
print "Got an alarm"
signal.signal(signal.SIGINT, ctrlc_catcher)
signal.signal(signal.SIGALRM, alarm_catcher)
while True:
signal.alarm(1)
pass
当我执行程序时,输出为空白,当我按下 Ctrl-C 键时,它显示“Process can't be...”消息。
我的问题是为什么 signal.alarm(1)
不工作?
但是,如果我使用
while True:
signal.alarm(1)
time.sleep(1)
pass
之后,警报被触发,在输出屏幕中,我每秒都会看到“收到警报”消息。 time.sleep(1) 做什么来触发警报? 谢谢
最佳答案
在第一个示例中,您不断地重置闹钟。你从现在开始设置 1 秒的闹钟,然后 0.00001 秒后你从现在开始设置 1 秒的闹钟,然后 0.00001 秒后你设置从现在开始的 1 秒的闹钟......所以闹钟总是在未来 1 秒!在第二个示例中,通过休眠,您可以在重置闹钟之前等待 1 秒,因此它实际上有时间响起。
我想你在第一个例子中的意思是
signal.alarm(1)
while True:
pass
关于python - Python "while True"循环中的 time.sleep 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723881/