def run(self): """ Run this worker. Parameters: ---------------------------------------------------------------------- retval: jobID of the job we ran. This is used by unit test code when calling this working using the --params command line option (which tells this worker to insert the job itself). """ # Easier access to options options = self._options # --------------------------------------------------------------------- # Connect to the jobs database self.logger.info("Connecting to the jobs database") cjDAO = ClientJobsDAO.get() # Get our worker ID self._workerID = cjDAO.getConnectionID() # ------------------------------------------------------------------------- # if params were specified on the command line, insert a new job using # them. if options.params is not None: options.jobID = cjDAO.jobInsert(client='dummy', cmdLine="python -m nupic.swarming.DummyWorker --jobID={JOBID}", params=options.params) # --------------------------------------------------------------------- # Get the search parameters jobInfo = cjDAO.jobInfo(options.jobID) self.logger.info("Job info retrieved: %s" % (str(jobInfo))) if options.workerID is not None: wID = options.workerID else: wID = self._workerID buildID = Configuration.get('nupic.software.buildNumber', 'N/A') logPrefix = '<BUILDID=%s, WORKER=DW, WRKID=%s, JOBID=%s> ' % \ (buildID, wID, options.jobID) ExtendedLogger.setLogPrefix(logPrefix) # --------------------------------------------------------------------- # Instantiate the Dummy object, which will handle the logic of # which models to create when we need more to evaluate. jobParams = json.loads(jobInfo.params) self.logger.info("Job Params: %s" % jobInfo.params) # prints the current status print >>sys.stderr, "reporter:status:Running dummy worker on job:%d" % \ (options.jobID) self.logger.info("Start of the dummy worker") startTime = time.time() runTime = jobParams['runTime'] jobLoad = jobParams['load'] crashJob = jobParams['crash'] try: while True: if runTime != -1 and time.time() > startTime + runTime: break self.logger.info("In dummy worker") if jobLoad == 'heavy': # Computationally intensive process # Takes 0.8 sec approximately numIterations = 30000 for i in range(numIterations): d = numpy.random.rand(1000).sum() else: time.sleep(0.8) except: self.logger.exception("DummyWorker exception;") if crashJob: self.logger.info("Crash of the dummy worker") print >>sys.stderr, "reporter:status:Crashed dummy worker..." raise RuntimeError("Simulating job crash.") else: self.logger.info("End of the dummy worker") print >>sys.stderr, "reporter:status:Finished dummy worker..." #import auxilary #auxilary.do_something() return options.jobID
# Instantiate the DummyWorker and run it dum = DummyWorker(options, argv[1:]) return dum.run() ############################################################################# if __name__ == "__main__": # Init the NuPic logging configuration from the nupic-logging.conf configuration # file. This is found either in the NTA_CONF_DIR directory (if defined) or # in the 'conf' subdirectory of the NuPic install location. initLogging(verbose=True) # Replace default logger with our extention logging.setLoggerClass(ExtendedLogger) logger = logging.getLogger('com.numenta.nupic.cluster.dummyworker.main') buildID = Configuration.get('nupic.software.buildNumber', 'N/A') logPrefix = '<BUILDID=%s, WORKER=DW, WRKID=%s, JOBID=N/A> ' % \ (buildID, wID) ExtendedLogger.setLogPrefix(logPrefix) try: main(sys.argv) except: msg = StringIO.StringIO() print >>msg, "Exception occurred running DummyWorker: " traceback.print_exc(None, msg) logger.error(msg.getvalue()) msg.close() del msg raise