def run_task(self) -> None:
'''Execute the task inside the asyncio event loop after `DELAY`
seconds. Track the time it takes to run, and log when it starts/stops.
If/when `reset()` is called, reset the wait time to `DELAY` seconds.'''
self.last_run = 0.0
self.target = self.time() + self.DELAY
while self.running:
try:
now = self.time()
if now < self.target:
sleep = self.target - now
await self.sleep(sleep)
elif self.last_run < self.target:
Log.debug('executing timer task %s', self.name)
self.last_run = self.time()
await self.run()
total = self.time() - self.last_run
Log.debug('finished timer task %s in %.1f seconds',
self.name, total)
else:
sleep = min(5.0, self.DELAY)
await self.sleep(sleep)
except CancelledError:
Log.debug('cancelled timer task %s', self.name)
raise
except Exception:
Log.exception('exception in timer task %s', self.name)
评论列表
文章目录