Timeout test hangs IDLE

Andreas Tawn andreas.tawn at ubisoft.com
Wed Dec 5 11:37:44 EST 2007


 
> > On Dec 5, 6:00 am, "Andreas Tawn" <andreas.t... at ubisoft.com> wrote:
> > > I'm trying to integrate the timeout function from 
> > herehttp://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/47
> > 3878into a
> > > long running automation script and the following code 
> > causes IDLE after
> > > 20 or 30 iterations in countTest.
> > >
> > > This is in 2.5, XP and there's no traceback.
> > >
> > > Could someone point me at the user error?
> > >
> > > Thanks in advance.
> > >
> > > def countTest():
> > >     for i in xrange(10000000):
> > >         print i
> > >     return True
> > >
> > > def timeout(func, args=(), kwargs={}, timeout_duration=1, 
> > default=None):
> > >     import threading
> > >     class InterruptableThread(threading.Thread):
> > >         def __init__(self):
> > >             threading.Thread.__init__(self)
> > >             self.result = None
> > >
> > >         def run(self):
> > >             try:
> > >                 self.result = func(*args, **kwargs)
> > >             except:
> > >                 self.result = default
> > >
> > >     it = InterruptableThread()
> > >     it.start()
> > >     it.join(timeout_duration)
> > >     if it.isAlive():
> > >         return default
> > >     else:
> > >         return it.result
> > >
> > > def runTest():
> > >     timeout(countTest, timeout_duration=5)
> > >
> > > if __name__ == "__main__":
> > >     runTest()
> > 
> > I'm confused. What does it cause IDLE to do? I tried running the
> > script and it ran fine. I killed it 17346 since I have no 
> intention of
> > letting it tie up my work for your extraordinary large iteration
> > number.
> > 
> > I'm using Python 2.4 on Windows XP.
> > 
> > Mike
> 
> Sorry, I need a better proof-reader.
> 
> When I run that code, the output gets to ~26 and then IDLE (or the
> shell, I'm not sure which) hangs and there's  zero CPU activity in the
> pythonw.exe process.

Also, I should say that the the idea is that the huge iteration should
timeout after 5 seconds. I only gave it a 10000000 range because I
didn't know how fast it would get through the loop. Perhaps you stopped
it before the timeout triggered?

Cheers,

Drea



More information about the Python-list mailing list