Pulling this python pattern out of a larger project — might be useful on its own.
A decorator that debounces a function by N seconds.
import threading
import functools
def debounce(wait_seconds: float):
def decorator(fn):
timer = None
@functools.wraps(fn)
def wrapper(*args, **kwargs):
nonlocal timer
if timer is not None:
timer.cancel()
timer = threading.Timer(wait_seconds, lambda: fn(*args, **kwargs))
timer.daemon = True
timer.start()
return wrapper
return decorator
Feel free to fork and adapt.
Developer Discussions