summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge/__init__.py')
-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)