|
@@ -222,18 +222,25 @@ class Scheduler(object):
|
|
|
heapify=heapq.heapify):
|
|
|
"""Run a tick, that is one iteration of the scheduler.
|
|
|
|
|
|
- Executes all due tasks.
|
|
|
+ Executes one due task per call.
|
|
|
|
|
|
+ Returns preferred delay in seconds for next call.
|
|
|
"""
|
|
|
+
|
|
|
+ def _when(entry, next_time_to_run):
|
|
|
+ return (time.mktime(entry.schedule.now().timetuple())
|
|
|
+ + (adjust(next_time_to_run) or 0))
|
|
|
+
|
|
|
adjust = self.adjust
|
|
|
max_interval = self.max_interval
|
|
|
H = self._heap
|
|
|
if H is None:
|
|
|
- H = self._heap = [event_t(adjust(e.is_due()[1]) or 0, 5, e)
|
|
|
+ H = self._heap = [event_t(_when(e, e.is_due()[1]) or 0, 5, e)
|
|
|
for e in values(self.schedule)]
|
|
|
heapify(H)
|
|
|
if not H:
|
|
|
return max_interval
|
|
|
+
|
|
|
event = H[0]
|
|
|
entry = event[2]
|
|
|
is_due, next_time_to_run = self.is_due(entry)
|
|
@@ -242,7 +249,7 @@ class Scheduler(object):
|
|
|
if verify is event:
|
|
|
next_entry = self.reserve(entry)
|
|
|
self.apply_entry(entry, producer=self.producer)
|
|
|
- heappush(H, event_t(next_time_to_run, event[1], next_entry))
|
|
|
+ heappush(H, event_t(_when(next_entry, next_time_to_run), event[1], next_entry))
|
|
|
return 0
|
|
|
else:
|
|
|
heappush(H, verify)
|