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):
(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:
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)