docs: def shutdown(cluster_info, queues=['input']):
    """Stops all TensorFlow nodes by feeding ``None`` into the multiprocessing.Queues.
  
    Args:
      :cluster_info: node reservation information for the cluster (e.g. host, executor_id, pid, ports, etc).
      :queues: *INTERNAL_USE*
  
    Returns:
      A nodeRDD.mapPartitions() function
    """
    def _shutdown(iter):
      host = util.get_ip_address()
      executor_id = util.read_executor_id()
  
      # reconnect to shared queue
      mgr = _get_manager(cluster_info, host, executor_id)
  
      # send SIGTERM to Tensorboard proc (if running)
      for node in cluster_info:
        if node['host'] == host and node['executor_id'] == executor_id:
          tb_pid = node['tb_pid']
          if tb_pid != 0:
            logging.info("Stopping tensorboard (pid={0})".format(tb_pid))
            subprocess.Popen(["kill", str(tb_pid)])
  
      # terminate any listening queues
      logging.info("Stopping all queues")
      for q in queues:
        try:
          queue = mgr.get_queue(q)
          logging.info("Feeding None into {0} queue".format(q))
          queue.put(None, block=True)
        except (AttributeError, KeyError):
          msg = "Queue '{}' not found on this node, check for exceptions on other nodes.".format(q)
          raise Exception(msg)
  
      logging.info("Setting mgr.state to 'stopped'")
      mgr.set('state', 'stopped')
      return [True]
  
    return _shutdown