Kill a function while it's being executed
Albert Hopkins
marduk at letterboxes.org
Wed Feb 4 10:25:52 EST 2009
On Wed, 2009-02-04 at 13:40 +0200, Noam Aigerman wrote:
> Hi All,
> I have a script in which I receive a list of functions. I iterate over
> the list and run each function. This functions are created by some other
> user who is using the lib I wrote. Now, there are some cases in which
> the function I receive will never finish (stuck in infinite loop).
> Suppose I use a thread which times the amount of time passed since the
> function has started, Is there some way I can kill the function after a
> certain amount of time has passed (without asking the user who's giving
> me the list of functions to make them all have some way of notifying
> them to finish)?
> Thanks, Noam
Noam, did you hijack a thread?
You could decorate the functions with a timeout function. Here's one
that I either wrote or copied from a recipe (can't recall):
class FunctionTimeOut(Exception):
pass
def function_timeout(seconds):
"""Function decorator to raise a timeout on a function call"""
import signal
def decorate(f):
def timeout(signum, frame):
raise FunctionTimeOut()
def funct(*args, **kwargs):
old = signal.signal(signal.SIGALRM, timeout)
signal.alarm(seconds)
try:
result = f(*args, **kwargs)
finally:
signal.signal(signal.SIGALRM, old)
signal.alarm(0)
return result
return funct
return decorate
Then
func_dec = function_timeout(TIMEOUT_SECS)
for func in function_list:
timeout_function = func_dec(func)
try:
timeout_function(...)
except FunctionTimeout:
...
-a
More information about the Python-list
mailing list