Update requirements to include kazoo
[python_utils.git] / thread_utils.py
index 65f60373e923879c7f15ef71085b56830db6b5f5..df637e043e94abb78ea2fc6421213e753c3ba70d 100644 (file)
@@ -120,6 +120,27 @@ def background_thread(
         return wrapper(_funct)
 
 
+class ThreadWithReturnValue(threading.Thread):
+    """A thread whose return value is plumbed back out as the return
+    value of :meth:`join`.
+    """
+
+    def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None):
+        threading.Thread.__init__(
+            self, group=None, target=target, name=None, args=args, kwargs=kwargs
+        )
+        self._target = target
+        self._return = None
+
+    def run(self):
+        if self._target is not None:
+            self._return = self._target(*self._args, **self._kwargs)
+
+    def join(self, *args):
+        threading.Thread.join(self, *args)
+        return self._return
+
+
 def periodically_invoke(
     period_sec: float,
     stop_after: Optional[int],