Преглед на файлове

Beat: Wake up 0.010 seconds earlier to adjust lateness

Ask Solem преди 10 години
родител
ревизия
20340d79b5
променени са 1 файла, в които са добавени 5 реда и са изтрити 4 реда
  1. 5 4
      celery/beat.py

+ 5 - 4
celery/beat.py

@@ -212,7 +212,7 @@ class Scheduler(object):
     def is_due(self, entry):
         return entry.is_due()
 
-    def tick(self, event_t=event_t, min=min,
+    def tick(self, drift=-0.010, event_t=event_t, min=min,
              heappop=heapq.heappop, heappush=heapq.heappush,
              heapify=heapq.heapify):
         """Run a tick, that is one iteration of the scheduler.
@@ -223,7 +223,7 @@ class Scheduler(object):
         max_interval = self.max_interval
         H = self._heap
         if H is None:
-            H = self._heap = [event_t(e.is_due()[1] or 0, 5, e)
+            H = self._heap = [event_t(e.is_due()[1] + drift or 0, 5, e)
                               for e in values(self.schedule)]
             heapify(H)
         event = H[0]
@@ -239,7 +239,8 @@ class Scheduler(object):
             else:
                 heappush(H, verify)
                 return min(verify[0], max_interval)
-        return min(next_time_to_run or max_interval, max_interval)
+        return min(next_time_to_run + drift if next_time_to_run
+                   else max_interval, max_interval)
 
     def should_sync(self):
         return (
@@ -476,7 +477,7 @@ class Service(object):
         try:
             while not self._is_shutdown.is_set():
                 interval = self.scheduler.tick()
-                if interval:
+                if interval and interval > 0.0:
                     debug('beat: Waking up %s.',
                           humanize_seconds(interval, prefix='in '))
                     time.sleep(interval)