docs: def _get_manager(cluster_info, host, executor_id):
    """Returns this executor's "singleton" instance of the multiprocessing.Manager, reconnecting per python-worker if needed.
  
    Args:
      :cluster_info: cluster node reservations
      :host: host IP address
      :executor_id: unique id per executor (created during initial call to run())
  
    Returns:
      TFManager instance for this executor/python-worker
    """
    for node in cluster_info:
      if node['host'] == host and node['executor_id'] == executor_id:
        addr = node['addr']
        authkey = node['authkey']
        TFSparkNode.mgr = TFManager.connect(addr, authkey)
        break
  
    if TFSparkNode.mgr is None:
      msg = "No TFManager found on this node, please ensure that:\n" + \
            "1. Spark num_executors matches TensorFlow cluster_size\n" + \
            "2. Spark cores/tasks per executor is 1.\n" + \
            "3. Spark dynamic allocation is disabled."
      raise Exception(msg)
  
    logging.info("Connected to TFSparkNode.mgr on {0}, executor={1}, state={2}".format(host, executor_id, str(TFSparkNode.mgr.get('state'))))
    return TFSparkNode.mgr