class_docstr: This is a queue based run data processor that queues incoming batches and processes them using
  single worker thread.
docstr: Continuously logs run data until `self._continue_to_process_data` is set to False.
  If an exception occurs during logging, a `MlflowException` is raised.
docstr_tok: ["Continuously","logs","run","data","until","`","self._continue_to_process_data","`","is","set","to","False",".","If","an","exception","occurs","during","logging",",","a","`","MlflowException","`","is","raised","."]
code: def _logging_loop(self) -> None:
      """
      Continuously logs run data until `self._continue_to_process_data` is set to False.
      If an exception occurs during logging, a `MlflowException` is raised.
      """
      try:
          while not self._stop_data_logging_thread_event.is_set():
              self._log_run_data()
          # Drain the queue after the stop event is set.
          while not self._queue.empty():
              self._log_run_data()
      except Exception as e:
          from mlflow.exceptions import MlflowException
  
          raise MlflowException(
              f"Exception inside the run data logging thread: {e}"
          )
  
imports: import atexit
  import logging
  import threading
  from concurrent.futures import ThreadPoolExecutor
  from queue import Empty, Queue
  from mlflow.entities.metric import Metric
  from mlflow.entities.param import Param
  from mlflow.entities.run_tag import RunTag
  from mlflow.utils.async_logging.run_batch import RunBatch
  from mlflow.utils.async_logging.run_operations import RunOperations
label_desc: Use image node_id 4 for calling the AsyncLoggingQueue obj's underlying member method code with example usage: obj._logging_loop() without return types