'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.'

def __init__(self, signal, delay=0.3, rateLimit=0, slot=None):

    QtCore.QObject.__init__(self)
    signal.connect(self.signalReceived)
    self.signal = signal
    self.delay = delay
    self.rateLimit = rateLimit
    self.args = None
    self.timer = ThreadsafeTimer.ThreadsafeTimer()
    self.timer.timeout.connect(self.flush)
    self.block = False
    self.slot = weakref.ref(slot)
    self.lastFlushTime = None
    if (slot is not None):
        self.sigDelayed.connect(slot)
