class_docstr: This publisher will handle failures and closures and will
  attempt to restart things
  
  delivery confirmations are used to track messages that have
  been sent and if they have been confirmed
docstr: Stop the by closing the channel and connection and setting
  a stop state.
  
  The IOLoop is started independently which means we need this
  method to handle things such as the Try/Catch when KeyboardInterrupts
  are caught.
  Starting the IOLoop again will allow the publisher to cleanly
  disconnect from RMQ.
docstr_tok: ["Stop","the","by","closing","the","channel","and","connection","and","setting","a","stop","state",".","The","IOLoop","is","started","independently","which","means","we","need","this","method","to","handle","things","such","as","the","Try\/Catch","when","KeyboardInterrupts","are","caught",".","Starting","the","IOLoop","again","will","allow","the","publisher","to","cleanly","disconnect","from","RMQ","."]
code: def stop(self):
      """
      Stop the by closing the channel and connection and setting
      a stop state.
  
      The IOLoop is started independently which means we need this
      method to handle things such as the Try/Catch when KeyboardInterrupts
      are caught.
      Starting the IOLoop again will allow the publisher to cleanly
      disconnect from RMQ.
      """
      self._logger.info("stopping")
      self._stopping = True
      self._close_connection()
  
imports: import time
  import threading
  import pika
  from studio.storage.storage_setup import get_storage_verbose_level
  from studio.util import logs
label_desc: Use image node_id 24 for calling the RMQueue obj's underlying member method code with example usage: obj.stop() without return types