class Worker(object): """This class represents a worker object that does the actual calculation""" def __init__(self, remoteobj): self.free = True self.jobID = None self.job = None self.sage = Sage() self.remoteobj = remoteobj def gotJob(self, job): if job == None: raise NoJobException self.jobID = job['id'] self.doJob(job).addCallbacks( self.doneJob, self.failedJob).addCallback( self.noJob) def doneJob(self, result): # self.remoteobj.callRemote('jobDone', self.jobID, result) self.remoteobj.callRemote('jobDone', self.jobID, result) def failedJob(self, failure): print 'This is where our error is getting sent!' if failure!=None and isinstance(failure, NoJobException): failure.trap(NoJobException) log.msg('[Worker] No Job received from server, sleeping \ for 10 seconds') time.sleep(10.0) else: self.remoteobj.callRemote('jobFailed', self.jobID, failure.getErrorMessage()) return failure def noJob(self, failure): print "Hey" if failure!=None and isinstance(failure, NoJobException): failure.trap(NoJobException) log.msg('[Worker] No Job received from server, sleeping \ for 10 seconds') time.sleep(10.0) log.msg('[Client] No job returned from server, sleeping...') self.free = True def checkForJobs(self): log.msg('[Monitor] Checking for jobs...') for worker in self.workers: if worker.free: job = self.remoteobj.callRemote('getJob') job.addCallbacks(worker.gotJob, worker.noJob) tsk = task.LoopingCall(monitor.checkForJobs) tsk.start(10.0, now=False) reactor.run()