def METHOD_NAME(self, runnable, args=None, kwargs=None):
    if self.error:
        raise DataError(self.error)
    if not self.active:
        raise FrameworkError('Timeout is not active')
    timeout = self.time_left()
    error = TimeoutError(self._timeout_error,
                         test_timeout=isinstance(self, TestTimeout))
    if timeout <= 0:
        raise error
    executable = lambda: runnable(*(args or ()), **(kwargs or {}))
    return Timeout(timeout, error).execute(executable)