浏览代码

Scheduler should only sleep a maximum of 2 seconds between iterations.

Ask Solem 15 年之前
父节点
当前提交
a4555caae6
共有 1 个文件被更改,包括 7 次插入2 次删除
  1. 7 2
      celery/worker/scheduler.py

+ 7 - 2
celery/worker/scheduler.py

@@ -3,15 +3,20 @@ import heapq
 
 
 from celery.worker.revoke import revoked
 from celery.worker.revoke import revoked
 
 
+DEFAULT_MAX_INTERVAL = 2
+
 
 
 class Scheduler(object):
 class Scheduler(object):
     """ETA scheduler.
     """ETA scheduler.
 
 
     :param ready_queue: Queue to move items ready for processing.
     :param ready_queue: Queue to move items ready for processing.
+    :keyword max_interval: Maximum sleep interval between iterations.
+        Default is 2 seconds.
 
 
     """
     """
 
 
-    def __init__(self, ready_queue):
+    def __init__(self, ready_queue, max_interval=DEFAULT_MAX_INTERVAL):
+        self.max_interval = max_interval
         self.ready_queue = ready_queue
         self.ready_queue = ready_queue
         self._queue = []
         self._queue = []
 
 
@@ -53,7 +58,7 @@ class Scheduler(object):
                         heapq.heappush(heap, event)
                         heapq.heappush(heap, event)
 
 
                 if now < eta:
                 if now < eta:
-                    yield eta - now
+                    yield min(eta - now, float(self.max_interval))
                 else:
                 else:
                     event = pop(heap)
                     event = pop(heap)