【问题标题】:Periodic signal alarm周期性信号报警
【发布时间】:2016-03-19 07:00:05
【问题描述】:

我希望我的 Python 脚本每隔 5 秒接收一次定期警报。我试过下面的代码,但它只收到一次警报然后挂起。

import os
import signal
import time

def handler(signum, stack):
    print 'Alarm: ', time.ctime()

signal.signal(signal.SIGALRM, handler)
signal.alarm(5)

【问题讨论】:

标签: python signals alarm


【解决方案1】:

没有任何东西挂起,没有任何东西收到一次警报。当闹钟第一次响起时,您的程序已经死了。试试看:

import signal
import time

def handler(signum, stack):
    print 'Alarm: ', time.ctime()

signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
time.sleep(10)
print "interrupted"

当你想要它在一个循环中时,只需将它包装在一个循环中:

signal.signal(signal.SIGALRM, handler)
for i in range(1000):
    signal.alarm(5)
    time.sleep(10)
    print "interrupted #%d" % i

你也可以做无限循环。但是在这种情况下捕获 KeyboardInterrupt 以避免像

这样的讨厌的异常
Alarm:  Sat Mar 19 08:28:06 2016
interrupted #2
^CTraceback (most recent call last):
  File "alaam.py", line 10, in <module>
    time.sleep(10)
KeyboardInterrupt

【讨论】:

    【解决方案2】:

    因为闹钟只设置一次。如果您需要定期
    试试这个:

    def handler(signum, stack):
       print 'Alarm: ', time.ctime()
       signal.alarm(5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多