def run(self): self.log.debug("workshop routine begin %s", self._group_id) while self.IsRunning: try: tb = _interval_timer() ######### process self._prepared_work_handler() self._done_work_handler() ######### process te = _interval_timer() sleep_interval= 0.05-(te-tb) if sleep_interval > 0: time.sleep(sleep_interval) except Exception as e: self.log.exception(e) raise self.log.debug("workshop routine end %s", self._group_id)
def _exec_or_requeue_work(self,work): # insert work into execute queue, otherwise re-queue it if not self._priority_support: self._insert_work_to_exec_queue(work) return True now = _interval_timer() if work._begin_time and work._begin_time > now: self._queue_work(work) return False elif self._redoable_supoort and work._period: work._begin_time = now + work._period self.log.warn("[%s] begin=%f,now=%f", self._group_id,work._begin_time,now) self._insert_work_to_exec_queue(work) return True
def test4(ws,log): log.info("test for redoable support") ws = WorkShop(priority_support=True,redoable_supoort=True,log=log) ws.StartWork() time.sleep(1) ws.QueueWork(MyRedoableWork(seq=1,period=3,log=log)) while True: infos = [] infos = ws.GetInfo() for info in infos.infos: if info.DoneWorkSize > 0: log.info("%s->doneworkQueue=%d",info.Name, info.DoneWorkSize) time.sleep(1) if __name__ == '__main__': import vavava.util log = vavava.util.initlog("./log/test_workshop.log") ws = WorkShop() try: test4(ws,log) except(KeyboardInterrupt): log.error('main thread(%f): User canceled by Ctrl-c', _interval_timer()) finally: log.info('main thread(%f):stop', _interval_timer()) ws.StopWork() log.info('main thread(%f):stopped', _interval_timer())