from time import sleep import traceback from abc import abstractmethod, ABC class MuleBase(ABC): def __init__(self, mule_name, logger, sleep_secs): self.name = mule_name self.logger = logger self.sleep_secs = sleep_secs @abstractmethod def loop(self): pass def __call__(self): while True: try: self.loop() self.logger.info(f'[{self.name}] Completed work, sleeping (sleep_secs={self.sleep_secs}).') except Exception as ex: self.logger.error(f'[{self.name}] Task failed, sleeping before restarting (sleep_secs={self.sleep_secs}, exception={str(ex)}).\n{traceback.format_exc()}') finally: sleep(self.sleep_secs)