All pastes #247096 Raw Edit

Unnamed

public text v1 · immutable
#247096 ·published 2006-11-13 00:50 UTC
rendered paste body
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()