'Join the thread.  If target raised an exception, re-raise it.
Otherwise, return the value returned by target.
:param timeout: Timeout value to pass to threading.Thread.join().
:param suppress_exception: If True, don\'t re-raise the exception.'

def join(self, timeout=None, suppress_exception=False):

    Thread.join(self, timeout)
    try:
        if self._e:
            if (not suppress_exception):
                s = error.exception_context(self._e[1])
                s = error.join_contexts(error.get_context(), s)
                error.set_exception_context(self._e[1], s)
                raise self._e[0], self._e[1], self._e[2]
        else:
            return self._retval
    finally:
        self._e = None
        self._retval = None
