diff options
Diffstat (limited to 'jpa_test/timeout.py')
| -rw-r--r-- | jpa_test/timeout.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/jpa_test/timeout.py b/jpa_test/timeout.py new file mode 100644 index 0000000..52d7d92 --- /dev/null +++ b/jpa_test/timeout.py @@ -0,0 +1,22 @@ +from functools import wraps +import errno +import os +import signal + +def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): + def decorator(func): + def _handle_timeout(signum, frame): + raise Exception(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 |
