code: def get(self, timeout=0):
          
          self._autoclean()
          if timeout < 0:
              uid = self._redis.rpoplpush(self.QUEUE_KEY, self.ACKBUF_KEY)
          else:
              uid = self._redis.brpoplpush(self.QUEUE_KEY, self.ACKBUF_KEY, timeout)
          item = self._redis.hget(self.ITEMS_KEY, uid)
  
          # Deserialize only if the item exists: it is equal to None if it times out
          if self.serializer is not None and item is not None:
              item = self.serializer.loads(item)
  
          return uid, item
docs: Return next item from queue. Blocking by default.
  
          Blocks if queue is empty, see `timeout` parameter.
  
          Internally this also pops uid from queue and writes it to
          ackbuffer.
  
          :param timeout: blocking timeout in seconds
                          - 0: block forever (default)
                          - negative: disable blocking