Multi-threading with a simple timer?

Robin Becker robin at reportlab.com
Tue Jul 3 03:36:43 EDT 2018


On 03/07/2018 07:12, Gregory Ewing wrote:
> import signal, sys
> 
> def timeout(*args):
>      print("Too late!")
>      sys.exit(0)
> 
> signal.signal(signal.SIGALRM, timeout)
> signal.setitimer(signal.ITIMER_REAL, 15)
> data = input("Enter something: ")
> print("You entered: ", data)

This doesn't work in windows (SIGALRM not available see
https://stackoverflow.com/questions/6947065/right-way-to-run-some-code-with-timeout-in-python)

For completeness I think it needs the handler restoring; this seemed to work for me in linux; I did try using SIG_DFL, but 
apparently that just prints 'Alarm clock' and exits at least

import signal, sys, time

def timeout(*args):
         print("Too late!")
         sys.exit(0)

signal.signal(signal.SIGALRM, timeout)
signal.setitimer(signal.ITIMER_REAL, 15)
data = input("Enter something: ")
signal.signal(signal.SIGALRM,signal.SIG_IGN)
print("You entered: ", data)
for i in reversed(xrange(15)):
         print i
         time.sleep(1)

print 'finished!'


if I leave out the signal.signal(signal.SIGALRM,signal.SIG_IGN) then the timeout function gets called anyway.
-- 
Robin Becker




More information about the Python-list mailing list