class Services(object): def __init__(self): self.services = [] self.tg = ThreadGroup() # signal that the service is done shutting itself down: self.done = event.Event() def add(self, service): self.services.append(service) self.tg.add_thread(self.run_service, service, self.done) def stop(self): for service in self.services: service.stop() service.wait() if not self.done.ready(): self.done.send() self.tg.stop() def wait(self): self.tg.wait() def restart(self): self.stop() self.done = event.Event() for restart_service in self.services: restart_service.reset() self.tg.add_thread(self.run_service, restart_service, self.done) @staticmethod def run_service(service, done): """Service start wrapper. :param service: service to run :param done: event to wait on until a shutdown is triggered :returns: None """ service.start() done.wait()
def __init__(self): self.services = [] self.tg = ThreadGroup() # signal that the service is done shutting itself down: self.done = event.Event()