code: def visit_batch_lag(self, signal: "Signal") -> None:
      if self._async_lag_callback is None or not isinstance(
          signal, BatchLagSignal
      ):
          return
  
      if signal.lag > self._async_lag_threshold:
          current_time = monotonic()
          if (
              self._last_lag_callback_at is None
              or current_time - self._last_lag_callback_at
              > self._callbacks_interval
          ):
              execute_callback(
                  callback=self._async_lag_callback,
                  container=self._container,
                  in_async=self._in_async,
              )
              self._last_lag_callback_at = current_time
  
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 4 for calling the SignalsProcessor obj's underlying member method code with example usage: obj.visit_batch_lag(signal) without return types