Timeout test hangs IDLE

kyosohma at gmail.com kyosohma at gmail.com
Wed Dec 5 17:07:31 EST 2007


On Dec 5, 10:37 am, "Andreas Tawn" <andreas.t... at ubisoft.com> wrote:
> > > 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

No...I ran it for at least 30-60 seconds. Making a thread stop on
command is a pain though.

This link taught me one way to do it, but I cannot vouch how will it
works as I've never aborted any of my threads:

http://wiki.wxpython.org/LongRunningTasks

Mike



More information about the Python-list mailing list