def tasks(self): """Produce events until stopped""" self.running = True while self.running: self.update_event.clear() if not len(self.heap): self.update_event.wait() runtime, delay, queue = heappop(self.heap) now = time() if now < runtime: self.update_event.wait(runtime - now) else : try : task = queue.get_nowait() except Queue.Empty: continue # no pushback else : yield task queue.task_done() self.add(delay, queue)