code: def submit(self, fn, *args, **kwargs):
      with self._shutdown_lock:
          if self._shutdown:  # pragma: no cover
              raise RuntimeError(
                  "cannot schedule new futures after shutdown"
              )
  
          f = _base.Future()
          w = _WorkItem(f, fn, args, kwargs)
  
          self._work_queue.put(w)
          self._adjust_thread_count()
          return f
  
file_path: distributed/distributed/_concurrent_futures_thread.py
imports: from __future__ import annotations
  import atexit
  import itertools
  import os
  import queue
  import threading
  import weakref
  from concurrent.futures import _base
label_desc: Use image node_id 2 for calling the ThreadPoolExecutor obj's underlying member method code with example usage: obj.submit(fn) and returns: f