using timers to force an execution time

Diez B. Roggisch deets at nospam.web.de
Thu Jul 16 07:08:40 EDT 2009


Diez B. Roggisch wrote:

> superpollo wrote:
> 
>> hello.
>> 
>> based upon previuos suggestions, i tried to write a program in which i
>> would like to have a certain code fragment to execute only for a
>> specified amount of time (say 3 seconds), then bail out.
>> 
>> but i get the following:
>> 
>> $ cat tmr004.py
>> #!/usr/bin/python -u
>> 
>> import threading , time
>> 
>> e = threading.Event()
>> t = threading.Timer(3.0, e.set)
>> t.start()
>> print time.asctime(time.localtime(time.time()))
>> while not e.isSet():
>>      for repeat in range(10):
>>          print time.time()
>>          time.sleep(0.66)
>> print time.asctime(time.localtime(time.time()))
>> $ ./tmr004.py
>> Thu Jul 16 12:31:27 2009
>> 1247740287.44
>> 1247740288.1
>> 1247740288.76
>> 1247740289.42
>> 1247740290.08
>> 1247740290.74
>> 1247740291.4
>> 1247740292.06
>> 1247740292.72
>> 1247740293.38
>> Thu Jul 16 12:31:34 2009
>> $
>> 
>> see? the while body ran for about 7 seconds... i bet it has to do with
>> the fact that the timer does not control inner loops... any suggestion?
> 
> Of course the inner loop isn't affected by the set event - how should it
> be, if you don't check it.
> 
> if you rewrite it as this:
> 
> while True:
>     for repeat in range(10):
>         if e.isSet():
>            break
>         print time.time()
>         time.sleep(.66)
> 
> it should terminate earlier.

This is of course wrong, remove the outer "while"

Diez



More information about the Python-list mailing list