python - Python "while True"循环中的 time.sleep 混淆

标签 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

当我执行程序时,输出为空白,当我按下 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/

相关文章:

python - 带有 Python 3.5 的 Anaconda 版本

python - Easy_install 的 --prefix 选项不会改变它尝试安装我的包的位置

c++ - connect() 似乎在信号前加上错误的命名空间

python - 将信号连接到槽会产生 (nullptr)::slot() 错误

c - 通过 setcontext 从信号处理程序返回

python - 如何使用 Python 检索 AWS Lambda 公共(public) IP 地址?

Python3 dbus导入错误: undefined symbol: _Py_ZeroStruct

c - 使用信号在父进程和多个子进程之间进行进程同步

mysql - 如何在MySQL存储过程中抛出警告?

python - 带有 redirect_uri 的 social-auth-app-django facebook 后端状态