diff --git a/lib/utils/timeout.py b/lib/utils/timeout.py new file mode 100644 index 000000000..f4db06ffb --- /dev/null +++ b/lib/utils/timeout.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import threading + +def timeout(func, args=(), kwargs={}, timeout_duration=1, default=None): + class InterruptableThread(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.result = None + + def run(self): + try: + self.result = func(*args, **kwargs) + except: + self.result = default + + thread = InterruptableThread() + thread.start() + thread.join(timeout_duration) + if thread.isAlive(): + return default + else: + return thread.result