how to run an arbitrary function with timeout?

G

Garry Hodgson

i'm building a test suite on top of unittest, and some
of the tests involve things that might hang, like trying
to connect to a wedged server. so i'd like a simple function
that i can call that will run a given (func,args) pair and
return either the value or raise an exception if it times
out. this seems like it should be straightforward, but i've
not had much luck getting it to work.

my latest attempt, below, raises the exception ok,
but still doesn't return until snooze() completes:

--> xx
going to sleep
Traceback (most recent call last):
File "./xx", line 26, in ?
print RunWithTimeout( snooze, (10,), 2 )
File "./xx", line 16, in RunWithTimeout
raise TookTooLong, 'fsdfsdf'
__main__.TookTooLong: fsdfsdf

....8 second delay here...

waking up


can someone tell me what i'm doing wrong?

thanks

------------------------
#!/usr/bin/env python2.3

from threading import *
from time import sleep

class TookTooLong( Exception ):
pass

def RunWithTimeout( func, args, timeout ):
t = Thread( target=func, args=args )
t.start()
t.join( timeout )

if t.isAlive():
del t
raise TookTooLong, 'fsdfsdf'
return 'ok'


def snooze( duration ):
print 'going to sleep'
sleep( duration )
print 'waking up'

if __name__ == '__main__':
print RunWithTimeout( snooze, (10,), 2 )
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,040
Latest member
papereejit

Latest Threads

Top