#!/usr/bin/env python from __future__ import print_function from __future__ import unicode_literals from __future__ import division import signal ############################################################ # Timeout ############################################################ class TimeoutError(Exception): def __init__(self, value = "Timed Out"): self.value = value def __str__(self): return repr(self.value) def timeout(seconds_before_timeout): def decorate(f): def handler(signum, frame): raise TimeoutError() def new_f(*args, **kwargs): old = signal.signal(signal.SIGALRM, handler) signal.alarm(seconds_before_timeout) try: result = f(*args, **kwargs) finally: signal.signal(signal.SIGALRM, old) signal.alarm(0) return result new_f.func_name = f.func_name return new_f return decorate