Ничего не висит, ничто не получает сигнал тревоги один раз. Ваша программа уже мертва, когда звонок звонит в первый раз. Попробуйте так:
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
Вы можете найти 'модуль sched' в стандартной библиотеке интерес. https://docs.python.org/2/library/sched.html – cdarke