docs: def _init_zmq(self, port_publish, port_subscribe):
          """Initialize zmq messaging.
  
          Listen on sub_port. This port might at
          some point receive the message to start publishing on a certain
          port, but until then, no publishing.
          """
  
          log.debug('kernel {} publishing on port {}'
                    ''.format(self.analysis.id_, port_publish))
          self.zmq_publish = zmq.Context().socket(zmq.PUB)
          self.zmq_publish.connect('tcp://127.0.0.1:{}'.format(port_publish))
  
          log.debug('kernel {} subscribed on port {}'
                    ''.format(self.analysis.id_, port_subscribe))
          self.zmq_sub_ctx = zmq.Context()
          self.zmq_sub = self.zmq_sub_ctx.socket(zmq.SUB)
          self.zmq_sub.setsockopt(zmq.SUBSCRIBE,
                                  self.analysis.id_.encode('utf-8'))
          self.zmq_sub.connect('tcp://127.0.0.1:{}'.format(port_subscribe))
  
          self.zmq_stream_sub = zmq.eventloop.zmqstream.ZMQStream(self.zmq_sub)
          self.zmq_stream_sub.on_recv(self.zmq_listener)
  
          # send zmq handshakes until a zmq ack is received
          self.zmq_ack = False
          self.send_handshake()