abots/abots/events/every.py

28 lines
826 B
Python
Raw Normal View History

2019-03-27 20:52:05 +00:00
from time import monotonic, sleep
from threading import Event, Thread
2019-03-27 20:52:05 +00:00
class Every:
def __init__(self, interval, function, *args, **kwargs):
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.event = Event()
2019-03-27 20:52:05 +00:00
def _wrapper(self, *args, **kwargs):
2019-03-27 20:52:05 +00:00
start = monotonic()
2019-05-07 05:00:20 +00:00
state = None
while not self.event.is_set():
2019-05-07 05:00:20 +00:00
state = self.function(state, *args, **kwargs)
2019-03-27 20:52:05 +00:00
sleep(self.interval - ((monotonic() - start) % self.interval))
def start(self):
args = self.args
kwargs = self.kwargs
thread = Thread(target=self._wrapper, args=args, kwargs=kwargs)
thread.setDaemon(True)
thread.start()
2019-05-07 05:00:20 +00:00
return thread
2019-03-27 20:52:05 +00:00
def stop(self):
self.event.set()