|
@@ -92,23 +92,24 @@ class Schedule(object):
|
|
nowfun = time
|
|
nowfun = time
|
|
pop = heapq.heappop
|
|
pop = heapq.heappop
|
|
max_interval = self.max_interval
|
|
max_interval = self.max_interval
|
|
|
|
+ queue = self._queue
|
|
|
|
|
|
while 1:
|
|
while 1:
|
|
- if self._queue:
|
|
|
|
- eta, priority, entry = verify = self._queue[0]
|
|
|
|
|
|
+ if queue:
|
|
|
|
+ eta, priority, entry = verify = queue[0]
|
|
now = nowfun()
|
|
now = nowfun()
|
|
|
|
|
|
if now < eta:
|
|
if now < eta:
|
|
yield min(eta - now, max_interval), None
|
|
yield min(eta - now, max_interval), None
|
|
else:
|
|
else:
|
|
- event = pop(self._queue)
|
|
|
|
|
|
+ event = pop(queue)
|
|
|
|
|
|
if event is verify:
|
|
if event is verify:
|
|
if not entry.cancelled:
|
|
if not entry.cancelled:
|
|
yield None, entry
|
|
yield None, entry
|
|
continue
|
|
continue
|
|
else:
|
|
else:
|
|
- heapq.heappush(self._queue, event)
|
|
|
|
|
|
+ heapq.heappush(queue, event)
|
|
yield None, None
|
|
yield None, None
|
|
|
|
|
|
def empty(self):
|
|
def empty(self):
|
|
@@ -116,7 +117,8 @@ class Schedule(object):
|
|
return not self._queue
|
|
return not self._queue
|
|
|
|
|
|
def clear(self):
|
|
def clear(self):
|
|
- self._queue = []
|
|
|
|
|
|
+ self._queue[:] = [] # used because we can't replace the object
|
|
|
|
+ # and the operation is atomic.
|
|
|
|
|
|
def info(self):
|
|
def info(self):
|
|
return ({"eta": eta, "priority": priority, "item": item}
|
|
return ({"eta": eta, "priority": priority, "item": item}
|