rendered paste body def tasks(self): """Produce events until stopped""" self.running = True while self.running: self.update_event.clear() timeout = None task = None with self.heap_lock: if len(self.heap): runtime, delay, queue = self.heap[0] now = time() if now < runtime: timeout = runtime - now else: timeout = 0 try: task = queue.get_nowait() except Queue.Empty: heapq.heappop(self.heap) # remove task = None else: self.add(delay, queue) if task: yield task queue.task_done() # TODO: тут ещё можно подкорректировать timeout self.wait(timeout)