code: def unpickle(self, throw=True, throw_dead=True):
          
          _vv and IOLOG.debug('%r.unpickle()', self)
          if throw_dead and self.is_dead:
              self._throw_dead()
  
          obj = self._unpickled
          if obj is Message._unpickled:
              fp = BytesIO(self.data)
              unpickler = _Unpickler(fp, **self.UNPICKLER_KWARGS)
              unpickler.find_global = self._find_global
              try:
                  # Must occur off the broker thread.
                  obj = unpickler.load()
                  self._unpickled = obj
              except (TypeError, ValueError):
                  e = sys.exc_info()[1]
                  raise StreamError('invalid message: %s', e)
  
          if throw:
              if isinstance(obj, CallError):
                  raise obj
  
          return obj
docs: Unpickle :attr:`data`, optionally raising any exceptions present.
  
          :param bool throw_dead:
              If :data:`True`, raise exceptions, otherwise it is the caller's
              responsibility.
  
          :raises CallError:
              The serialized data contained CallError exception.
          :raises ChannelError:
              The `is_dead` field was set.