docs: def set_exception(self, exc_info):
      """
      This method allows you to set an exception in the future without requring
      that exception to be raised from the futures worker. This method can be
      called on an unbound future.
  
      :param exc_info: Either an exception info tuple or an exception value.
        In the latter case, the traceback will be automatically generated
        from the parent frame.
      :raise RuntimeError: If the future is already enqueued.
      """
  
      if not isinstance(exc_info, tuple):
        if not isinstance(exc_info, BaseException):
          raise TypeError('expected BaseException instance')
        try:
          # TODO: Filld the traceback so it appears as if the exception
          #       was actually raised by the caller? (Not sure if possible)
          raise exc_info
        except:
          exc_info = sys.exc_info()
          exc_info = (exc_info[0], exc_info[1], exc_info[2])
  
      with self._lock:
        if self._enqueued:
          raise RuntimeError('can not set exception of enqueued Future')
        self._exc_info = exc_info
        self._completed = True
        callbacks = self._prepare_done_callbacks()
      callbacks()