Skip to content

Commit

Permalink
If necessary, use /proc/loadavg to emulate os.getloadavg().
Browse files Browse the repository at this point in the history
svn path=/main/trunk/; revision=12422
  • Loading branch information
zmedico committed Jan 11, 2009
1 parent feaaa1b commit 8607a39
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions pym/_emerge/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8951,6 +8951,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):
Expand Down Expand Up @@ -8998,11 +9021,8 @@ def _can_add_job(self):
(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:
Expand Down Expand Up @@ -9383,9 +9403,9 @@ def _property_change(self, name, old_value, new_value):

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)

Expand Down

0 comments on commit 8607a39

Please sign in to comment.