随着时间的推移混淆了Python中的“while True”循环

时间:2013-12-21 21:46:06

标签: python signals

等级初学者 我在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

当我执行programm时,输出为空白,当我按下Ctrl-C键时,它会显示“Process not not .....”消息。 我的问题是为什么signal.alarm(1)不起作用? 但是,如果我使用

暂停一下
while True:
   signal.alarm(1)
   time.sleep(1)
   pass

然后警报被触发,在输出屏幕中,我每秒钟后都会看到“收到警报”消息。 什么是time.sleep(1)这样做才能触发警报? 感谢

2 个答案:

答案 0 :(得分:7)

在第一个示例中,您不断重置警报。从现在开始设置闹钟1秒钟,然后0.00001秒后从现在开始设置闹钟1秒钟,然后0.00001秒后从现在开始设置闹钟1秒钟......所以闹钟总是1秒钟!在第二个示例中,通过休眠,您可以在重置警报之前允许1秒钟通过,因此它实际上有时间关闭。

我认为你在第一个例子中写的意思是

signal.alarm(1)
while True:
    pass

答案 1 :(得分:5)

问题在于你正在编写警报。以下内容来自signal docs

  

signal.alarm(time)

     

如果time非零,则此函数请求a   SIGALRM信号会在time秒内发送到进程。 以前任何一个   预定的警报被取消(任何一个警报只能安排一个   时间)。