aboutsummaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-02-15 20:58:10 -0800
committerZac Medico <zmedico@gentoo.org>2012-02-15 20:58:10 -0800
commit5697972e9f2a3021ca6ed99b24e23e32f7515bf9 (patch)
treeb44e73d8fdd09bdea04eacf8a79d9bace364f398 /pym
parentEventLoop.timeout_add: fix inverted min interval (diff)
downloadportage-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.
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/util/_eventloop/EventLoop.py14
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: