aboutsummaryrefslogtreecommitdiffstats
path: root/jpa_test/timeout.py
diff options
context:
space:
mode:
authorjeanpouget-abadie <jean.pougetabadie@gmail.com>2014-12-05 12:09:54 -0500
committerjeanpouget-abadie <jean.pougetabadie@gmail.com>2014-12-05 12:09:54 -0500
commit67772e10f297d23e8d99b3901d044a3bb3345214 (patch)
tree75ef6f67d7279a64c9ce1cb425e2edcb4f38ce11 /jpa_test/timeout.py
parent011a965b4d36ef4a9d42ab945a402f8cc602f496 (diff)
downloadcascades-67772e10f297d23e8d99b3901d044a3bb3345214.tar.gz
timeout file added
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