def main(self): print "ResultFetcher starting up" while True: t = time.time() data = self.r_server.zrangebyscore("Running_Queue", 0, t) for d in data: self.runParamDict = pickle.loads(d) if self.runParamDict['ClassType'] == 'Local': j = Job(configDict=self.runParamDict) jobStr = 'local job' else: j = RemoteJob(configDict=self.runParamDict) jobStr = 'remote job' print "Polling %s for '%s'" % (jobStr, self.runParamDict['Filename']) retCode = j.isFinished() if retCode > 0: if retCode == 1: # case: no except print "Job complete for '%s'" % self.runParamDict['Filename'] try: j.getReturnData() except AttributeError: # pass if j without getReturnData() e.g. local pass else: print "Exception for '%s'!!!" % self.runParamDict['Filename'] self.r_server.rpush("Result_Queue", pickle.dumps(self.runParamDict)) else: pollTime = time.time() + self.runParamDict['PollPeriod'] * 60 self.r_server.zadd("Running_Queue", pickle.dumps(self.runParamDict), pollTime) self.runParamDict = None self.r_server.zremrangebyscore("Running_Queue", 0, t) time.sleep(60) # hard wait (since no blocking method on ordered sets)