aboutsummaryrefslogtreecommitdiffstats
path: root/jpa_test/timeout.py
diff options
context:
space:
mode:
Diffstat (limited to 'jpa_test/timeout.py')
-rw-r--r--jpa_test/timeout.py22
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