diff options
| author | Josh <[email protected]> | 2020-08-29 13:12:07 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-08-28 23:12:07 -0400 |
| commit | 6baacb2c23e974f6a4dcc6eb738192811f54693e (patch) | |
| tree | 81d91790ebfe5b3e962f2854529b3529a4690764 | |
| parent | [commands] Use edited timestamp if provided for cooldown timing (diff) | |
| download | discord.py-6baacb2c23e974f6a4dcc6eb738192811f54693e.tar.xz discord.py-6baacb2c23e974f6a4dcc6eb738192811f54693e.zip | |
[tasks] Don't update _next_iteration on retry
| -rw-r--r-- | discord/ext/tasks/__init__.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/discord/ext/tasks/__init__.py b/discord/ext/tasks/__init__.py index e54573ef..b4e8f2b2 100644 --- a/discord/ext/tasks/__init__.py +++ b/discord/ext/tasks/__init__.py @@ -68,6 +68,7 @@ class Loop: raise ValueError('count must be greater than 0 or None.') self.change_interval(seconds=seconds, minutes=minutes, hours=hours) + self._last_iteration_failed = False self._last_iteration = None self._next_iteration = None @@ -88,18 +89,22 @@ class Loop: backoff = ExponentialBackoff() await self._call_loop_function('before_loop') sleep_until = discord.utils.sleep_until + self._last_iteration_failed = False self._next_iteration = datetime.datetime.now(datetime.timezone.utc) try: await asyncio.sleep(0) # allows canceling in before_loop while True: - self._last_iteration = self._next_iteration - self._next_iteration = self._get_next_sleep_time() + if not self._last_iteration_failed: + self._last_iteration = self._next_iteration + self._next_iteration = self._get_next_sleep_time() try: await self.coro(*args, **kwargs) + self._last_iteration_failed = False now = datetime.datetime.now(datetime.timezone.utc) if now > self._next_iteration: self._next_iteration = now except self._valid_exception as exc: + self._last_iteration_failed = True if not self.reconnect: raise await asyncio.sleep(backoff.delay()) |