Esempio n. 1
0
    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)
Esempio n. 2
0
 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
Esempio n. 3
0
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())