rendered paste body 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 runtime, delay, queue = heappop(self.heap) try: task = queue.get_nowait() except Queue.Empty: pass else: queue.task_done() yield task heappush(self.heap, (time() + delay, delay, queue)) if task: # TODO: тут ещё можно подкорректировать timeout self.update_event.wait(timeout)