On 5/18/2010 6:24 AM, Albert Hopkins wrote:
On Tue, 2010-05-18 at 02:45 -0700, pacopyc wrote:
Hi, I've a question for you. I'd like to call a function and waiting
its return value for a time max (30 sec).
The function could not respond and then I must avoid to wait for
infinite time. OS is Windows XP.
Can you help me?
Thank
This is how I do it with a function decorator. I probably borrowed this
from someone and not attributed it. Anyway, it works on Linux, not sure
about Windows:
def function_timeout(seconds):
"""Function decorator to raise a timeout on a function call"""
import signal
class FunctionTimeOut(Exception):
pass
def decorate(f):
def timeout(signum, frame):
raise FunctionTimeOut()
def funct(*args, **kwargs):
old = signal.signal(signal.SIGALRM, timeout)
signal.alarm(seconds)
from help(signal):
alarm() -- cause SIGALRM after a specified time [Unix only]
I do not know of any replacement in the stdlib, but one could check the
code for multiprocessing to see how it does a timeout. Or check the
pywin32 library
http://pypi.python.org/pypi/pywin32/210
try:
result = f(*args, **kwargs)
finally:
signal.signal(signal.SIGALRM, old)
signal.alarm(0)
return result
return funct
return decorate
--
http://mail.python.org/mailman/listinfo/python-list