2016-03-19 28 views
0

Bir Python betiğimin her 5 saniyede bir periyodik alarm almasını istiyorum. Aşağıdaki kodu denedim, ancak yalnızca bir kez alarmı alır, sonra askıda kalıyor.Periyodik sinyal alarmı

import os 
import signal 
import time 

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

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

Sen ilgi standart kütüphanesinde 'sched' modülünü bulabilir. https://docs.python.org/2/library/sched.html – cdarke

cevap

0

Hiçbir şey askıda kalmaz, hiçbir şey bir kez alarmı alır. Alarm zili ilk kez çaldığında programınız çoktan öldü. böylece deneyin:

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" 

Eğer bir döngü içinde istediğinizde, sadece bir döngü içinde sar:

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

Ayrıca sonsuz döngü yapabilirsiniz. Ama alarm sadece bir kez ayarlandığında Çünkü

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 
+0

Teşekkür ederim, gayet iyi çalışıyor. – user1530405

+0

Harika. O zaman cevabı kabul etmekte özgürsünüz;) – flaschbier

0

gibi kötü durumları önlemek için bu durumda KeyboardInterrupt yakalamak. Eğer periyodik gerekiyorsa
bu deneyin:

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