class_docstr: Object which collects rapid-fire signals and condenses them
  into a single signal or a rate-limited stream of signals.
  Used, for example, to prevent a SpinBox from generating multiple
  signals when the mouse wheel is rolled over it.
  
  Emits sigDelayed after input signals have stopped for a certain period of
  time.
docstr: Initialization arguments:
  signal - a bound Signal or pyqtSignal instance
  delay - Time (in seconds) to wait for signals to stop before emitting (default 0.3s)
  slot - Optional function to connect sigDelayed to.
  rateLimit - (signals/sec) if greater than 0, this allows signals to stream out at a
              steady rate while they are being received.
  threadSafe - Specify if thread-safety is required. For backwards compatibility, it
               defaults to True.
docstr_tok: ["Initialization","arguments",":","signal","-","a","bound","Signal","or","pyqtSignal","instance","delay","-","Time","(","in","seconds",")","to","wait","for","signals","to","stop","before","emitting","(","default","0.3s",")","slot","-","Optional","function","to","connect","sigDelayed","to",".","rateLimit","-","(","signals\/sec",")","if","greater","than","0",",","this","allows","signals","to","stream","out","at","a","steady","rate","while","they","are","being","received",".","threadSafe","-","Specify","if","thread-safety","is","required",".","For","backwards","compatibility",",","it","defaults","to","True","."]
code: def __init__(
      self,
      signal,
      delay=0.3,
      rateLimit=0,
      slot=None,
      *,
      threadSafe=True,
  ):
      """Initialization arguments:
      signal - a bound Signal or pyqtSignal instance
      delay - Time (in seconds) to wait for signals to stop before emitting (default 0.3s)
      slot - Optional function to connect sigDelayed to.
      rateLimit - (signals/sec) if greater than 0, this allows signals to stream out at a
                  steady rate while they are being received.
      threadSafe - Specify if thread-safety is required. For backwards compatibility, it
                   defaults to True.
      """
  
      QtCore.QObject.__init__(self)
      self.delay = delay
      self.rateLimit = rateLimit
      self.args = None
      Timer = ThreadsafeTimer if threadSafe else QtCore.QTimer
      self.timer = Timer()
      self.timer.timeout.connect(self.flush)
      self.lastFlushTime = None
      self.signal = signal
      self.signal.connect(self.signalReceived)
      if slot is not None:
          self.blockSignal = False
          self.sigDelayed.connect(slot)
          self.slot = weakref.ref(slot)
      else:
          self.blockSignal = True
          self.slot = None
  
file_path: pyqtgraph/pyqtgraph/SignalProxy.py
imports: import weakref
  from time import perf_counter
  from .functions import SignalBlock
  from .Qt import QtCore
  from .ThreadsafeTimer import ThreadsafeTimer
label_desc: Use image node_id 1 to create a new SignalProxy object from inherited base classes: QtCore with example: obj = SignalProxy(signal, delay, rateLimit, slot)