def finalize_done(self, stu, retcode, start_time, end_time, *kwd): self.log.info('[Worker_%d] Process finalize, status=%s' % (self.id, ProcessStatus.describe(stu))) if stu == ProcessStatus.SUCCESS: self.finialized = True self.status = WorkerStatus.FINALIZED else: self.status = WorkerStatus.FINALIZE_FAIL self.workeragent.finalize_done(self.id, retcode, ProcessStatus.describe(stu))
def task_done(self, stu, retcode, start_time, end_time, logfile_path): self.log.info( '[Worker_%d] Task %s finish, status=%s' % (self.id, str(self.running_task.tid), ProcessStatus.describe(stu))) if stu == ProcessStatus.SUCCESS: self.running_task.complete(start_time, end_time) if logfile_path and logfile_path.endswith('.tmp'): os.rename(logfile_path, logfile_path[:-4]) else: self.running_task.fail(start_time, end_time, ProcessStatus.describe(stu)) if logfile_path and logfile_path.endswith('.tmp'): os.rename(logfile_path, logfile_path[:-3] + 'err') self.finish_task = self.running_task #if self.status == WorkerStatus.IDLE: self.cond.acquire() self.cond.notify() self.cond.release()
def run(self): init_try = 0 ret = 0 while not self.get_stop_flag(): while not self.initialized and not self.setup_flag: self.cond.acquire() self.cond.wait() self.cond.release() if not self.initialized: if init_try < Config.Config.getPolicyattr('initial_try_time'): init_try += 1 #print "<worker_%d> setup process"%self.id ret = self.setup(self.workeragent.iniExecutor) #print "<worker_%d> self.process =%s"%(self.id,self.process is None) if ret != 0: continue self.workeragent.setup_done(self.id, ret, ProcessStatus.describe(ret)) self.process.start() if self.initialized: # ask for tasks tmptime = 0 # times of ask tasks while not self.fin_flag: task = self.workeragent.getTask() if task is None: tmptime += 1 if tmptime == 5: tmptime = 0 self.idle() continue #print 'worker %d running task %d'%(self.id,task.tid) self.do_task(task) # wait for process return result self.cond.acquire() self.cond.wait() self.cond.release() self.running_task = None self.workeragent.task_done(self.finish_task) self.finish_task = None # TODO need to wait for all worker? #else: # wlog.info('[Worker_%d] Initialization Error, wait for stop'%self.id) # self.cond.acquire() # self.cond.wait() # self.cond.release() wlog.debug('[Worker_%d] Finalize task = %s' % (self.id, self.workeragent.finExecutor)) self.finalize(self.workeragent.finExecutor) if ret == ProcessStatus.SUCCESS: self.status = WorkerStatus.FINALIZING self.workeragent.set_status(self.id, self.status) #self.workeragent.finalize_done(self.id,ret) while self.finialized: time.sleep(0.1) #self.process.stop() self.process.wait() wlog.info("[Worker_%d] Stop..." % self.id) self.stop() wlog.info('[Worker_%d] Exit run method' % self.id)