I have the following code to run a shell command and kill it if it does not return within a certain amount of time:
def run_with_time_limit(command, limit): """Run the given command via a shell. Kill the command, and raise an exception, if the execution time exceeds <limit> seconds. Else return (exit_code, stdout, stderr, duration).""" class Alarm(Exception): pass def alarm_handler(signum, frame): raise Alarm start_stamp = time.time() signal.signal(signal.SIGALRM, alarm_handler) signal.alarm(limit) try: process = subprocess.Popen( command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) stdout, stderr = process.communicate() duration = time.time() - start_stamp signal.alarm(0) # reset the alarm except Alarm: process.kill() raise Alarm("The command did not return within %(limit)s seconds." % locals()) return (process.returncode, stdout, stderr, duration) run_with_time_limit("sleep 2", 1) This works as desired. But, I'd like to expand this to take some generic code, not just a shell command, and terminate it if it does not return quickly. @time_limiter def generic_function(arg1, arg2, time_limit=10): do_some_stuff() do_some_other_stuff() return val1, val2 If generic_function does not finish within 10 seconds it would stop executing and throw an exception. May I have some hints, please? -- https://mail.python.org/mailman/listinfo/python-list