Stop the mq publisher by closing the channel and connection. We
        set a flag here so that we stop scheduling new messages to be
        published. The IOLoop is started because this method is
        invoked by the Try/Catch below when KeyboardInterrupt is caught.
        Starting the IOLoop again will allow the publisher to cleanly
        disconnect from RabbitMQ.

def stop(self):
        """
        Stop the mq publisher by closing the channel and connection. We
        set a flag here so that we stop scheduling new messages to be
        published. The IOLoop is started because this method is
        invoked by the Try/Catch below when KeyboardInterrupt is caught.
        Starting the IOLoop again will allow the publisher to cleanly
        disconnect from RabbitMQ.
        """
        self._logger.info('Stopping')
        self._stopping = True
        self.close_connection()
        try:
            self._connection.ioloop.start()  # supposedly this is necessary...
        except Exception as e:
            pass
        self._logger.info('Stopped')