Kill a function while it's being executed
noama at answers.com
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)?
From: python-list-bounces+noama=answers.com at python.org
[mailto:python-list-bounces+noama=answers.com at python.org] On Behalf Of
Sent: Wednesday, February 04, 2009 5:26 PM
To: python-list at python.org
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):
"""Function decorator to raise a timeout on a function call"""
def timeout(signum, frame):
def funct(*args, **kwargs):
old = signal.signal(signal.SIGALRM, timeout)
result = f(*args, **kwargs)
func_dec = function_timeout(TIMEOUT_SECS)
for func in function_list:
timeout_function = func_dec(func)
More information about the Python-list