import asyncio from functools import wraps def async_debounce(wait): def decorator(func): task: asyncio.Task | None = None @wraps(func) async def debounced(*args, **kwargs): nonlocal task if task and not task.done(): return async def call_func(): await asyncio.sleep(wait) await func(*args, **kwargs) task = asyncio.create_task(call_func()) return task return debounced return decorator