Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Confusion over time.sleep in Python "while True" loop

Tags:

python

signals

Level beginner I am using python 2.7 version on ubuntu. I have a confusion regarding a small code snippet in python. I know that while True in python means to loop infinitely. I have the following code:

#!/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

When I execute the programm the output is blank, when I hit Ctrl-C key it displays "Process can't be....." message. My question is why the signal.alarm(1) is not working ? However if I put a small pause using

while True:
   signal.alarm(1)
   time.sleep(1)
   pass

after it then the alarm gets triggered and in the output screen I see "Got an alarm" message after every second. What is time.sleep(1) doing so that the alarm gets triggered? Thanks

like image 653
ρss Avatar asked Dec 15 '22 03:12

ρss


1 Answers

In the first example you're constantly resetting the alarm. You set an alarm for 1 second from now, then 0.00001 seconds later you set an alarm for 1 second from now, then 0.00001 seconds later you set an alarm for 1 second from now... so the alarm is always 1 second in the future! In the second example, by sleeping, you allow 1 second to pass before you reset the alarm, so it actually has time to go off.

I think what you meant to write in your first example was

signal.alarm(1)
while True:
    pass
like image 169
hobbs Avatar answered Jan 05 '23 21:01

hobbs