def test_call_later_once(self): self.called = 0 reactor = Clock() call = CallLaterOnce(self.call_function, reactor=reactor) call.schedule(delay=1) reactor.advance(1) assert self.called == 1
def test_call_later_twice_already_scheduled(self): self.called = 0 reactor = Clock() call = CallLaterOnce(self.call_function, reactor=reactor) call.schedule(delay=1) call.schedule(delay=2) reactor.advance(2) assert self.called == 1
class DBWorkerPeriodicComponent(DBWorkerBaseComponent): def __init__(self, worker, settings, stop_event, *args, **kwargs): super(DBWorkerPeriodicComponent, self).__init__(worker, settings, stop_event) self.periodic_task = CallLaterOnce(self.run_and_reschedule) self.periodic_task.setErrback(self.run_errback) def schedule(self, delay=0): self.periodic_task.schedule(delay) def run_and_reschedule(self): if not self.stopped: self.run() self.periodic_task.schedule() def run_errback(self, failure): self.logger.error(failure.getTraceback()) if not self.stopped: self.periodic_task.schedule() @property def stopped(self): return self.stop_event.is_set()
def __init__(self, worker, settings, stop_event, *args, **kwargs): super(DBWorkerPeriodicComponent, self).__init__(worker, settings, stop_event) self.periodic_task = CallLaterOnce(self.run_and_reschedule) self.periodic_task.setErrback(self.run_errback)