code: def run(self) -> None:
      while True:
          path_info_list = self._work_queue.get()
  
          # None is the sentinel value
          # to signal the thread to exit
          if path_info_list is None:
              return
  
          # Try-catch is used to avoid exception from
          # one failed sync attempt to cause the thread to exit.
          try:
              self._upload_function(path_info_list)
          except Exception as e:
              logger.warning(
                  f"Sync of Tensorboard files failed with error: {e}"
              )
  
imports: import abc
  import logging
  import pathlib
  import queue
  import threading
  import time
  from dataclasses import dataclass
  from typing import Any, Callable, List
  from determined import tensorboard
  from determined.common import util
label_desc: Use image node_id 2 for calling the _TensorboardUploadThread obj's underlying member method code with example usage: obj.run() without return types