Changeset 127

Show
Ignore:
Timestamp:
02/22/08 22:42:38 (10 months ago)
Author:
edsuom
Message:

Fixed NDM niceness setting; headless node option; setting for number of jobs queued per worker at a time

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/AsynCluster/trunk/asyncluster/master/control.py

    r125 r127  
    213213        """ 
    214214        self.counter += 1 
    215         self.nodes[self.counter] = nodePerspective, nodeRoot 
     215        # Use a local copy of counter so it is unchanged when the callback 
     216        # fires 
     217        counter = self.counter 
     218        self.nodes[counter] = nodePerspective, nodeRoot 
    216219        d = nodeRoot.callRemote('spawnWorkers') 
    217         return d.addCallback(lambda _: self.counter) 
     220        return d.addCallback(lambda _: counter) 
    218221 
    219222    def detachNode(self, ID): 
     
    232235        deferred that fires with a new integer ID as assigned by the jobber. 
    233236        """ 
    234         return self.jobber.attachChild(nodeRoot) 
     237        N = int(self.config['server']['jobs']) 
     238        return self.jobber.attachChild(nodeRoot, N) 
    235239 
    236240    def detachWorker(self, ID): 
     
    287291        """ 
    288292        for ID, nodeStuff in self.nodes.iteritems(): 
    289             d = nodeRoot.callRemote(called, *args, **kw) 
     293            d = nodeStuff[1].callRemote(called, *args, **kw) 
    290294            d.addErrback(self._remoteError, ID) 
    291295            dList.append(d) 
  • projects/AsynCluster/trunk/asyncluster/ndm/client.py

    r125 r127  
    3535from asynqueue import jobs 
    3636 
    37 PYTHON="/usr/bin/python" 
     37PYTHON = "/usr/bin/python" 
     38RETRY_DELAY = 10.0  # sec 
    3839 
    3940 
     
    133134        """ 
    134135        Returns a list of bogomips float values for each core in the client's 
    135         CPU
    136         """ 
    137         values = [] 
     136        CPU, in order of CPU number
     137        """ 
     138        values = {} 
    138139        fh = open("/proc/cpuinfo", 'r') 
    139140        for line in fh: 
    140             if line.startswith("bogomips"): 
    141                 values.append(float(line.split()[-1])) 
     141            if line.startswith("processor"): 
     142                cpuNumber = int(line.split()[-1]) 
     143            elif line.startswith("bogomips"): 
     144                values[cpuNumber] = float(line.split()[-1]) 
    142145        fh.close() 
    143         return values 
     146        keys = values.keys() 
     147        keys.sort() 
     148        return [values[key] for key in keys] 
    144149 
    145150    def _pids(self): 
     
    191196    from the AsynCluster server. 
    192197    """ 
     198    def clientConnectionFailed(self, connector, reason): 
     199        """ 
     200        Called to indicate that I couldn't connect to the PB server 
     201        (yet). Retry after a while. 
     202        """ 
     203        pb.PBClientFactory.clientConnectionFailed(self, connector, reason) 
     204        reactor.callLater(RETRY_DELAY, connector.connect) 
     205         
    193206    def clientConnectionLost(self, *args, **kw): 
    194207        """ 
    195208        Called to terminate my process upon loss of connection to the PB server. 
    196209        """ 
    197         print "Connection lost to server!" 
    198210        pb.PBClientFactory.clientConnectionLost(self, *args, **kw) 
    199211        try: 
  • projects/AsynCluster/trunk/asyncluster/ndm/gui.py

    r125 r127  
    3737 
    3838# Now the regular imports 
    39 import os 
     39import os, pwd 
    4040from twisted.internet import defer, reactor, protocol 
    4141from PyQt4 import QtCore, QtGui 
     
    219219            p, windowManager, (windowManager,), 
    220220            env=env, path=homeDir, uid=uid) 
    221         os.system("renice +%d --user %s" % (niceness, self.user)) 
     221        os.system("renice +%d -u %s" % (niceness, self.user)) 
    222222        p.d.addCallback(lambda _: self.sessionEnd()) 
    223  
     223     
    224224    def sessionEnd(self): 
    225225        def ended(null): 
     
    237237            os.system("killall --user %s" % self.user) 
    238238            util.log("Killed all user processes") 
    239  
     239     
    240240    def closeEvent(self, event): 
    241241        """ 
  • projects/AsynCluster/trunk/asyncluster/ndm/node.py

    r125 r127  
    4141     
    4242    """ 
    43     def __init__(self, headless=False): 
     43    def __init__(self, headless=False, duration=None): 
    4444        import configobj 
    4545        self.config = configobj.ConfigObj(CONFIG_PATH) 
     
    5353        from twisted.internet import reactor 
    5454        reactor.callWhenRunning(self.startup) 
     55        if isinstance(duration, (float, int)): 
     56            reactor.callLater(float(duration), reactor.stop) 
    5557        reactor.run() 
    5658 
     
    125127    Manager() 
    126128 
    127 def runHeadless(): 
    128     Manager(headless=True
     129def runHeadless(duration=None): 
     130    Manager(headless=True, duration=duration
  • projects/AsynCluster/trunk/console

    r89 r127  
    108108        if cmd == 'user': 
    109109            cmd = 'userAction' 
    110         elif cmd == 'new': 
    111             cmd = 'newJob' 
    112             filePath = args[0] 
    113             if not os.path.exists(filePath): 
    114                 return self.oops("File '%s' not found" % filePath) 
    115             args = [self._jobCode(filePath)] 
    116         elif cmd == 'run': 
    117             cmd = 'runJob' 
     110        elif cmd == 'resetup': 
     111            srcDir = args[0] 
     112            if not os.path.isdir(srcDir): 
     113                return self.oops("Source directory '%s' not found" % srcDir) 
    118114        return caller(cmd, *args) 
    119115 
     
    434430        self.terminal.resetPrivateModes([privateModes.CURSOR_MODE]) 
    435431 
    436         self.rootWidget = TopWindow(self._painter) #, lambda f: self.reactor.callLater(0, f)) 
     432        self.rootWidget = TopWindow( 
     433            self._painter, lambda f: self.reactor.callLater(0, f)) 
    437434        self.rootWidget.reactor = self.reactor 
    438435        vbox = VBox() 
  • projects/AsynCluster/trunk/misc/etc_asyncluster.conf

    r2 r127  
    1010# Example: "subnets = 127.0.0.1, 192.168.1.0/24" 
    1111subnets = 127.0.0.1, 192.168.135.0/24 
     12 
     13# Number of jobs to queue up at a time for an individual worker 
     14jobs = 2 
    1215 
    1316