From 0c67956a230b5a526662c73ab90d753a27c3d206 Mon Sep 17 00:00:00 2001 From: Uk Date: Sat, 7 Sep 2019 10:42:08 +0100 Subject: [PATCH 1/2] Account for execution time to prevent drift --- timeloop/job.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/timeloop/job.py b/timeloop/job.py index df97d2f..c5b0905 100644 --- a/timeloop/job.py +++ b/timeloop/job.py @@ -1,5 +1,6 @@ from threading import Thread, Event from datetime import timedelta +from time import time class Job(Thread): def __init__(self, interval, execute, *args, **kwargs): @@ -15,5 +16,10 @@ def stop(self): self.join() def run(self): - while not self.stopped.wait(self.interval.total_seconds()): + next_period = self.interval.total_seconds() + next_time = time() + + while not self.stopped.wait(next_period): self.execute(*self.args, **self.kwargs) + next_time += self.interval.total_seconds() + next_period = next_time - time() From d8a48e01fc0a79f2eece9d9f1ab861ad4788e79c Mon Sep 17 00:00:00 2001 From: Uk Date: Sat, 7 Sep 2019 11:50:24 +0100 Subject: [PATCH 2/2] Pass args to job. Solves issue #7 on the main repo. --- timeloop/app.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/timeloop/app.py b/timeloop/app.py index d6808d1..7522325 100644 --- a/timeloop/app.py +++ b/timeloop/app.py @@ -48,8 +48,11 @@ def _stop_jobs(self): def job(self, interval): def decorator(f): - self._add_job(f, interval) - return f + def wrapper(*args, **kwargs): + self._add_job(f, interval, *args, **kwargs) + return f + return wrapper + return decorator def stop(self):