code: def shutdown(self, wait=True, *, cancel_futures=False):
      with self._shutdown_lock:
          self._shutdown = True
          if cancel_futures:
              # Drain all work items from the queue, and then cancel their
              # associated futures.
              while True:
                  try:
                      work_item = self._work_queue.get_nowait()
                  except queue.Empty:
                      break
                  if work_item is not None:
                      work_item.future.cancel()
  
          # Send a wake-up to prevent threads calling
          # _work_queue.get(block=True) from permanently blocking.
          self._work_queue.put(None)
      if wait:
          for t in self._threads:
              t.join()
  
imports: from concurrent.futures import _base
  import itertools
  import queue
  import threading
  import types
  import weakref
  import os
label_desc: Use image node_id 5 for calling the ThreadPoolExecutor obj's underlying member method code with example usage: obj.shutdown(wait) without return types