From e58d8d7e495e7417860af5e841aa60a3df00195c Mon Sep 17 00:00:00 2001 From: David Brochart Date: Thu, 7 Jan 2021 23:28:45 +0100 Subject: [PATCH] Fix debouncing and throttling code --- docs/source/examples/Widget Events.ipynb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/source/examples/Widget Events.ipynb b/docs/source/examples/Widget Events.ipynb index 0b2d193a38..cfec468f2c 100644 --- a/docs/source/examples/Widget Events.ipynb +++ b/docs/source/examples/Widget Events.ipynb @@ -379,12 +379,14 @@ " def __init__(self, timeout, callback):\n", " self._timeout = timeout\n", " self._callback = callback\n", - " self._task = asyncio.ensure_future(self._job())\n", "\n", " async def _job(self):\n", " await asyncio.sleep(self._timeout)\n", " self._callback()\n", "\n", + " def start(self):\n", + " self._task = asyncio.ensure_future(self._job())\n", + "\n", " def cancel(self):\n", " self._task.cancel()\n", "\n", @@ -401,6 +403,7 @@ " if timer is not None:\n", " timer.cancel()\n", " timer = Timer(wait, call_it)\n", + " timer.start()\n", " return debounced\n", " return decorator" ] @@ -454,22 +457,22 @@ " more than once every wait period. \"\"\"\n", " def decorator(fn):\n", " time_of_last_call = 0\n", - " scheduled = False\n", + " scheduled, timer = False, None\n", " new_args, new_kwargs = None, None\n", " def throttled(*args, **kwargs):\n", - " nonlocal new_args, new_kwargs, time_of_last_call, scheduled\n", + " nonlocal new_args, new_kwargs, time_of_last_call, scheduled, timer\n", " def call_it():\n", - " nonlocal new_args, new_kwargs, time_of_last_call, scheduled\n", + " nonlocal new_args, new_kwargs, time_of_last_call, scheduled, timer\n", " time_of_last_call = time()\n", " fn(*new_args, **new_kwargs)\n", " scheduled = False\n", " time_since_last_call = time() - time_of_last_call\n", - " new_args = args\n", - " new_kwargs = kwargs\n", + " new_args, new_kwargs = args, kwargs\n", " if not scheduled:\n", - " new_wait = max(0, wait - time_since_last_call)\n", - " Timer(new_wait, call_it)\n", " scheduled = True\n", + " new_wait = max(0, wait - time_since_last_call)\n", + " timer = Timer(new_wait, call_it)\n", + " timer.start()\n", " return throttled\n", " return decorator" ]