diff options
Diffstat (limited to 'src/timeout.py')
| -rw-r--r-- | src/timeout.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/timeout.py b/src/timeout.py new file mode 100644 index 0000000..d7381c3 --- /dev/null +++ b/src/timeout.py @@ -0,0 +1,25 @@ +from functools import wraps +import errno +import os +import signal + +class TimeoutError(Exception): + pass + +def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): + def decorator(func): + def _handle_timeout(signum, frame): + raise TimeoutError(error_message) + + def wrapper(*args, **kwargs): + signal.signal(signal.SIGALRM, _handle_timeout) + signal.alarm(seconds) + try: + result = func(*args, **kwargs) + finally: + signal.alarm(0) + return result + + return wraps(func)(wrapper) + + return decorator |
