[Twisted-Python] Understanding Deferreds/callback further
    Phil Mayers 
    p.mayers at imperial.ac.uk
       
    Fri Nov  3 09:12:25 MST 2006
    
    
  
Yi Qiang wrote:
> This is the part where I stumble on though, the exact implementation of 
> how to make it so that one calls back the other. 
One what calls back the other what?
You'll have issues with error handling and dropping workers if you're 
not careful to chain the deferreds correctly. I would try something like 
this personally.
class Worker:
     def gotJob(self, j):
         self.jobID = j.ID
         # do whatever
         callInThread(DoesntHoldGIL, j).addCallbacks(
             self.doneJob, self.failedJob
         ).addCallback(self.noJob, self.noJob)
     def doneJob(self, result):
         pb.callRemote('jobDone', self.jobID, result)
     def failedJob(self, f):
         pb.callRemote('jobFailed', self.jobID, f.getErrorMessage())
     def noJob(self, v):
         self.free = True
workers = Pool(Worker)
def checkForJobs():
     for worker in workers:
         if worker.free:
             worker.free = False
             job = pb.callRemote('getJob')
             job.addCallbacks(worker.gotJob, worker.noJob)
tsk = task.LoopingCall(checkForJobs)
# run every 10 seconds, start now
tsk.start(10, True)
    
    
More information about the Twisted-Python
mailing list