Kill a function while it's being executed

Noam Aigerman noama at
Tue Feb 17 13:53:40 EST 2009

Sorry for resurrecting an old thread, but it just bothers me that this
is the best way that python has to deal with killing running
functions... it's quite an ugly hack, no?

Is it a feature that's needed bit missing from python, or is it left out
on purpose (same way like java has deprecated thread.stop and
thread.suspend because they were not safe)?

Thanks, Noam


-----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