docs: def add_hook_sub(self, address, topics, callback):
          """Specify a *callback* in the same stream (thread) as the main receive
          loop. The callback will be called with the received messages from the
          specified subscription.
  
          Good for operations, which is required to be done in the same thread as
          the main recieve loop (e.q operations on the underlying sockets).
          """
          LOGGER.info("Subscriber adding SUB hook %s for topics %s",
                      str(address), str(topics))
          socket = get_context().socket(SUB)
          for t__ in self._magickfy_topics(topics):
              socket.setsockopt_string(SUBSCRIBE, six.text_type(t__))
          socket.connect(address)
          self._add_hook(socket, callback)