summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-01-12 08:28:04 +0000
committerZac Medico <zmedico@gentoo.org>2009-01-12 08:28:04 +0000
commitdd253e773b1aead47afa95c2aabec1bf58c49088 (patch)
tree0366aea6fcd4e2ee6a07515aaf32242224bdf0be /pym
parentbeca30200c738ac81351353028b29fd826750a1d (diff)
downloadportage-dd253e773b1aead47afa95c2aabec1bf58c49088.tar.gz
portage-dd253e773b1aead47afa95c2aabec1bf58c49088.tar.bz2
portage-dd253e773b1aead47afa95c2aabec1bf58c49088.zip
If necessary, use /proc/loadavg to emulate os.getloadavg(). (trunk r12422)
svn path=/main/branches/2.1.6/; revision=12478
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py36
1 files changed, 28 insertions, 8 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index adb740cd1..14590a5e0 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -8935,6 +8935,29 @@ def create_poll_instance():
return select.poll()
return PollSelectAdapter()
+getloadavg = getattr(os, "getloadavg", None)
+if getloadavg is None:
+ def getloadavg():
+ """
+ Uses /proc/loadavg to emulate os.getloadavg().
+ Raises OSError if the load average was unobtainable.
+ """
+ try:
+ loadavg_str = open('/proc/loadavg').readline()
+ except IOError:
+ # getloadavg() is only supposed to raise OSError, so convert
+ raise OSError('unknown')
+ loadavg_split = loadavg_str.split()
+ if len(loadavg_split) < 3:
+ raise OSError('unknown')
+ loadavg_floats = []
+ for i in xrange(3):
+ try:
+ loadavg_floats.append(float(loadavg_split[i]))
+ except ValueError:
+ raise OSError('unknown')
+ return tuple(loadavg_floats)
+
class PollScheduler(object):
class _sched_iface_class(SlotObject):
@@ -8982,11 +9005,8 @@ class PollScheduler(object):
(max_jobs is True or max_jobs > 1) and \
self._running_job_count() >= 1:
try:
- avg1, avg5, avg15 = os.getloadavg()
- except (AttributeError, OSError), e:
- writemsg("!!! getloadavg() failed: %s\n" % (e,),
- noiselevel=-1)
- del e
+ avg1, avg5, avg15 = getloadavg()
+ except OSError:
return False
if avg1 >= max_load:
@@ -9367,9 +9387,9 @@ class JobStatusDisplay(object):
def _load_avg_str(self):
try:
- avg = os.getloadavg()
- except (AttributeError, OSError), e:
- return str(e)
+ avg = getloadavg()
+ except OSError:
+ return 'unknown'
max_avg = max(avg)