diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-15 20:58:10 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-15 20:58:10 -0800 |
commit | 5697972e9f2a3021ca6ed99b24e23e32f7515bf9 (patch) | |
tree | b44e73d8fdd09bdea04eacf8a79d9bace364f398 | |
parent | 611ec3edf3695453639f2436049d0005f6e6f769 (diff) | |
download | portage-5697972e9f2a3021ca6ed99b24e23e32f7515bf9.tar.gz portage-5697972e9f2a3021ca6ed99b24e23e32f7515bf9.tar.bz2 portage-5697972e9f2a3021ca6ed99b24e23e32f7515bf9.zip |
EventLoop.iteration: sleep if no IO handlers
Sleep so that we don't waste cpu time by looping too quickly. This
makes EventLoop useful for code that needs to wait for timeout
callbacks regardless of whether or not any IO handlers are currently
registered.
-rw-r--r-- | pym/portage/util/_eventloop/EventLoop.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/pym/portage/util/_eventloop/EventLoop.py b/pym/portage/util/_eventloop/EventLoop.py index f6f9fc54b..24ba14077 100644 --- a/pym/portage/util/_eventloop/EventLoop.py +++ b/pym/portage/util/_eventloop/EventLoop.py @@ -158,7 +158,19 @@ class EventLoop(object): if self._run_timeouts(): events_handled += 1 if not event_handlers: - return bool(events_handled) + if not events_handled and may_block and \ + self._timeout_interval is not None: + # Sleep so that we don't waste cpu time by looping too + # quickly. This makes EventLoop useful for code that needs + # to wait for timeout callbacks regardless of whether or + # not any IO handlers are currently registered. + time.sleep(self._timeout_interval/1000) + if self._run_timeouts(): + events_handled += 1 + if not event_handlers: + return bool(events_handled) + else: + return bool(events_handled) if not self._poll_event_queue: if may_block: |