class LoopingCallManager(object): def __init__(self, calls=None): self.calls = calls or {} def register_looping_call(self, name, call): assert name not in self.calls, '{} is already registered'.format(name) self.calls[name] = call def start(self, name, *args): lcall = self.calls[name] if not lcall.running: lcall.start(*args) def stop(self, name): self.calls[name].stop() def shutdown(self): for lcall in self.calls.itervalues(): if lcall.running: lcall.stop()