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

ρss*_*ρss 4 python signals

级别初学者我在ubuntu上使用python 2.7版本.我对python中的一个小代码片段感到困惑.我知道while True在python中意味着无限循环.我有以下代码:

#!/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
Run Code Online (Sandbox Code Playgroud)

当我执行程序时,输出为空白,当我按下Ctrl-C键时,它显示"进程不能....."消息.我的问题是为什么signal.alarm(1)不工作?但是,如果我暂停使用

while True:
   signal.alarm(1)
   time.sleep(1)
   pass
Run Code Online (Sandbox Code Playgroud)

在它之后然后触发警报并且在输出屏幕中我每秒钟后看到"收到警报"消息.什么是time.sleep(1)这样做才能触发警报?谢谢

hob*_*bbs 7

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

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

signal.alarm(1)
while True:
    pass
Run Code Online (Sandbox Code Playgroud)


bco*_*rso 5

问题是你正在编写警报.以下是来自signal文档:

signal.alarm(time)

如果time非零,则此函数请求SIGALRMtime几秒钟内将 信号发送到进程.取消任何先前安排的警报(任何时候只能安排一个警报).