class_docstr: A special node type for colocating multiple PyNodes.
  
  Please don't add inner nodes to the program, as they will become part of this
  colocation node.
  
  Example:
  
      learner_node = lp.CacherNode(...)
      replay_node = lp.CourierNode(...)
      program.add_node(lp.MultiThreadingColocation([learner_node, replay_node]))
  
  In `__init__()`, `return_on_first_completed` defaults to False, meaning
  it will return from `run()` when 1) any of the colocated PyNodes throws an
  exception, or 2) all of them finish. This could be set to True so as to wait
  until any of the nodes finishes (or throws an exception).
code: def nodes(self):
      return self._nodes
  
file_path: launchpad/launchpad/nodes/multi_threading_colocation/node.py
imports: import collections
  import itertools
  from typing import Any, Sequence
  from launchpad.launch import worker_manager_migration
  from launchpad.nodes.python import node
label_desc: Use image node_id 3 for calling the MultiThreadingColocation obj's underlying member method code with example usage: obj.nodes() and returns: self