Kill a function while it's being executed

Noam Aigerman noama at
Wed Feb 4 16:54:09 CET 2009

About the hijacking - I *might* have done it without understanding what
I did (replied to a previous message and then changed the subject), if
that's what you mean...

-----Original Message-----
From: at
[ at] On Behalf Of
Albert Hopkins
Sent: Wednesday, February 04, 2009 5:26 PM
To: python-list at
Subject: Re: Kill a function while it's being executed

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
> 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
> certain amount of time has passed (without asking the user who's
> 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):

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)

                result = f(*args, **kwargs)
                signal.signal(signal.SIGALRM, old)
            return result

        return funct

    return decorate


func_dec = function_timeout(TIMEOUT_SECS)
for func in function_list:
    timeout_function = func_dec(func)
    except FunctionTimeout:



More information about the Python-list mailing list