def _run_next_task(self): delay = sys.maxsize for prio in sorted(self._queues.keys(), reverse=True): prio_queue = self._queues[prio] if not prio_queue: del(self._queues[prio]) continue for hostkey in sorted(prio_queue.keys(), key=ratecontrol.current_delay): queue = self._queues[prio][hostkey] if not queue: del(self._queues[prio][hostkey]) continue wait, d = ratecontrol.get_delay_to_next_request(hostkey) if not wait: queue.popleft()() if d < delay: delay = d if delay < sys.maxsize: self._timer_run_next_task.start(delay)