args: list of arguments for the `runnable`
        kwargs: dictionary of arguments for the `runnable`

def process(self, *args, **kwargs):
        """
        args: list of arguments for the `runnable`
        kwargs: dictionary of arguments for the `runnable`
        """
        try:
            timeout_seconds = self.timeout_timedelta.total_seconds()
            with timeout(self.run, timeout_seconds) as run:
                run(*args, **kwargs)
        except Exception as e:
            if self.verbose:
                if isinstance(e, TimeoutError):
                    logger.error('SafeTask timed out: %s', e, exc_info=True)
                else:
                    logger.error('Error running SafeTask: %s',
                                 e, exc_info=True)
            self.on_error(e, *args, **kwargs)
        else:
            self.on_success(*args, **kwargs)
        finally:
            self.on_completion(*args, **kwargs)