diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-07 20:24:47 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-07 20:24:47 -0800 |
commit | 20a5f9cb0c9fec433df7256617bd8fe09892fafa (patch) | |
tree | 3a137abd03c36d652ed1939425978176890a7dd5 | |
parent | f17ff92635818620ea0df156dee4796c353d954a (diff) | |
download | portage-20a5f9cb0c9fec433df7256617bd8fe09892fafa.tar.gz portage-20a5f9cb0c9fec433df7256617bd8fe09892fafa.tar.bz2 portage-20a5f9cb0c9fec433df7256617bd8fe09892fafa.zip |
QueueScheduler: use timeout_add
-rw-r--r-- | pym/_emerge/QueueScheduler.py | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/pym/_emerge/QueueScheduler.py b/pym/_emerge/QueueScheduler.py index a4ab328e8..91a2831f6 100644 --- a/pym/_emerge/QueueScheduler.py +++ b/pym/_emerge/QueueScheduler.py @@ -36,42 +36,25 @@ class QueueScheduler(PollScheduler): def run(self, timeout=None): - start_time = None - timed_out = False - remaining_timeout = timeout + timeout_id = None if timeout is not None: - start_time = time.time() - - while self._schedule(): - self._schedule_wait(timeout=remaining_timeout) - if timeout is not None: - elapsed_time = time.time() - start_time - if elapsed_time < 0: - # The system clock has changed such that start_time - # is now in the future, so just assume that the - # timeout has already elapsed. - timed_out = True - break - remaining_timeout = timeout - 1000 * elapsed_time - if remaining_timeout <= 0: - timed_out = True - break - - if timeout is None or not timed_out: + def timeout_callback(): + raise StopIteration() + timeout_id = self._timeout_add(timeout, timeout_callback) + + try: + + while self._schedule(): + self._iteration() + while self._running_job_count(): - self._schedule_wait(timeout=remaining_timeout) - if timeout is not None: - elapsed_time = time.time() - start_time - if elapsed_time < 0: - # The system clock has changed such that start_time - # is now in the future, so just assume that the - # timeout has already elapsed. - timed_out = True - break - remaining_timeout = timeout - 1000 * elapsed_time - if remaining_timeout <= 0: - timed_out = True - break + self._iteration() + + except StopIteration: + pass + + if timeout_id is not None: + self._unregister(timeout_id) def _schedule_tasks(self): """ |