code: def close(self) -> None:
      self._work_queue.put(None)
      self.join(10)
      was_waiting = False
      while self.is_alive():
          was_waiting = True
          logger.info(
              "Waiting for Tensorboard files to finish uploading"
          )
          self.join(10)
      if was_waiting:
          logger.info("Tensorboard upload completed")
  
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 4 for calling the _TensorboardUploadThread obj's underlying member method code with example usage: obj.close() without return types