code: def join(self, timeout=None):
          
          rv = self.thread.join(timeout)
          if self.err:
              raise self.err
          return self.val
docs: Wait for the thread to finish, may raise an
          exception (if any is uncaught during execution),
          and return the value returned by the target
          function.