docs: def start(self):
          """Start the subscriber.
          """
          def _get_addr_loop(service, timeout):
              """Try to get the address of *service* until for *timeout* seconds.
              """
              then = datetime.now() + timedelta(seconds=timeout)
              while datetime.now() < then:
                  addrs = get_pub_address(service, nameserver=self._nameserver)
                  if addrs:
                      return [addr["URI"] for addr in addrs]
                  time.sleep(1)
              return []
  
          # Subscribe to those services and topics.
          LOGGER.debug("Subscribing to topics %s", str(self._topics))
          self._subscriber = Subscriber(self._addresses,
                                        self._topics,
                                        translate=self._translate)
  
          if self._addr_listener:
              self._addr_listener = _AddressListener(self._subscriber,
                                                     self._services,
                                                     nameserver=self._nameserver)
  
          # Search for addresses corresponding to service.
          for service in self._services:
              addresses = _get_addr_loop(service, self._timeout)
              if not addresses:
                  LOGGER.warning("Can't get any address for %s", service)
                  continue
              else:
                  LOGGER.debug("Got address for %s: %s",
                               str(service), str(addresses))
              for addr in addresses:
                  self._subscriber.add(addr)
  
          return self._subscriber