code: def __init__(
      self,
      *,
      period: float,
      container: "MetadataContainer",
      queue: "Queue[Signal]",
      async_lag_threshold: float,
      async_no_progress_threshold: float,
      async_lag_callback: Optional[
          Callable[["MetadataContainer"], None]
      ] = None,
      async_no_progress_callback: Optional[
          Callable[["MetadataContainer"], None]
      ] = None,
      callbacks_interval: float = IN_BETWEEN_CALLBACKS_MINIMUM_INTERVAL,
      in_async: bool = True,
  ) -> None:
      super().__init__(sleep_time=period, name="CallbacksMonitor")
  
      self._container: "MetadataContainer" = container
      self._queue: "Queue[Signal]" = queue
      self._async_lag_threshold: float = async_lag_threshold
      self._async_no_progress_threshold: float = (
          async_no_progress_threshold
      )
      self._async_lag_callback: Optional[
          Callable[["MetadataContainer"], None]
      ] = async_lag_callback
      self._async_no_progress_callback: Optional[
          Callable[["MetadataContainer"], None]
      ] = async_no_progress_callback
      self._callbacks_interval: float = callbacks_interval
      self._in_async: bool = in_async
  
      self._last_batch_started_at: Optional[float] = None
      self._last_no_progress_callback_at: Optional[float] = None
      self._last_lag_callback_at: Optional[float] = None
  
file_path: neptune-client/src/neptune/internal/signals_processing/signals_processor.py
imports: from queue import Empty, Queue
  from threading import Thread
  from time import monotonic
  from typing import TYPE_CHECKING, Callable, Optional
  from neptune.internal.init.parameters import IN_BETWEEN_CALLBACKS_MINIMUM_INTERVAL
  from neptune.internal.signals_processing.signals import BatchLagSignal, SignalsVisitor
  from neptune.internal.threading.daemon import Daemon
label_desc: Use image node_id 1 to create a new SignalsProcessor object from inherited base classes: Daemon, SignalsVisitor with example: obj = SignalsProcessor()