Sun, 04 Feb 2018 01:36:59 +0000
Changed scheduler busylooping method, and decreased precision to 5 minutes:
if there are finite-horizon events in the queue, the scheduler thread will never
sleep longer than that. This is to quickly get back on track with the schedule
when the computer wakes up from sleep, if the sleep monitor is not working or
is not implemented for the particular operating system. However, if there are
only infinite-horizon events in the queue (meaning, DreamTime-scheduled events,
and the system is sleeping or "sleeping"), the scheduler will also sleep.
Hopefully this will also help the system stay properly asleep.
borgend/scheduler.py | file | annotate | diff | comparison | revisions |
--- a/borgend/scheduler.py Sun Feb 04 01:27:38 2018 +0000 +++ b/borgend/scheduler.py Sun Feb 04 01:36:59 2018 +0000 @@ -8,6 +8,7 @@ import time import logging +import math from threading import Condition, Thread from . import dreamtime @@ -132,10 +133,15 @@ class Scheduler(QueueThread): - # Default to precision of 60 seconds: the scheduler thread will never - # sleep longer than that, to get quickly back on track with the schedule - # when the computer wakes up from sleep - def __init__(self, precision=60): + # Default to precision of 5 minutes: if there are finite-horizon events in + # the queue, the scheduler thread will never sleep longer than that. + # This is to quickly get back on track with the schedule when the computer + # wakes up from sleep, if the sleep monitor is not working or is not + # implemented for the particular operating system. However, if there are + # only infinite-horizon events in the queue (meaning, DreamTime-scheduled + # events, and the system is sleeping or "sleeping"), the scheduler will + # also sleep. Hopefully this will also help the system stay properly asleep. + def __init__(self, precision=60*5): self.precision = precision self._next_event_time = None super().__init__(target = self._scheduler_thread, name = 'Scheduler') @@ -150,10 +156,11 @@ if not self._list: timeout = None else: - # Wait at most precision seconds, or until next event if it - # comes earlier - delta = self._list.when.monotonic(snapshot)-now - timeout = min(self.precision, delta) + delta = self._list.when.horizon(snapshot)-now + if delta==math.inf: + timeout=None + else: + timeout = min(self.precision, delta) if not timeout or timeout>0: logger.debug("Scheduler waiting %s seconds" % str(timeout))