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