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 -- http://mail.python.org/mailman/listinfo/python-list