docs: def debug_print(self):
          """
          Prints the ring for debugging purposes.
          """
  
          ring = self._fetch_all()
  
          print('Hash ring "{key}" replicas:'.format(key=self.key))
  
          now = time.time()
          n_replicas = len(ring)
          if ring:
              print('{:10} {:6} {:7} {}'.format('Start', 'Range', 'Delay', 'Node'))
          else:
              print('(no replicas)')
  
          nodes = collections.defaultdict(list)
  
          for n, (start, replica, heartbeat, expired) in enumerate(ring):
              hostname, pid, rnd = replica.split(':')
              node = ':'.join([hostname, pid])
  
              abs_size = (ring[(n+1) % n_replicas][0] - ring[n][0]) % RING_SIZE
              size = 100. / RING_SIZE * abs_size
              delay = int(now - heartbeat)
  
              nodes[node].append((hostname, pid, abs_size, delay, expired))
  
              print('{start:10} {size:5.2f}% {delay:6}s {replica}{extra}'.format(
                  start=start,
                  replica=replica,
                  delay=delay,
                  size=size,
                  extra=' (EXPIRED)' if expired else ''
              ))
  
          print()
          print('Hash ring "{key}" nodes:'.format(key=self.key))
  
          if nodes:
              print('{:8} {:8} {:7} {:20} {:5}'.format('Range', 'Replicas', 'Delay', 'Hostname', 'PID'))
          else:
              print('(no nodes)')
  
          for k, v in nodes.items():
              hostname, pid = v[0][0], v[0][1]
              abs_size = sum(replica[2] for replica in v)
              size = 100. / RING_SIZE * abs_size
              delay = max(replica[3] for replica in v)
              expired = any(replica[4] for replica in v)
              count = len(v)
              print('{size:5.2f}% {count:8} {delay:6}s {hostname:20} {pid:5}{extra}'.format(
                  start=start,
                  count=count,
                  hostname=hostname,
                  pid=pid,
                  delay=delay,
                  size=size,
                  extra=' (EXPIRED)' if expired else ''
              ))