def METHOD_NAME(self, runnable):
    # pylint: disable=W0201
    self.runnable = runnable
    try:
        yield messages.StartedMessage.get()
        queue = multiprocessing.SimpleQueue()
        process = multiprocessing.Process(
            target=self._run_unittest,
            args=(self.module_path, self.module_class_method, queue),
        )
        if not self.module_class_method:
            raise ValueError(
                "Invalid URI: could not be converted to an unittest dotted name."
            )
        process.start()
        most_current_execution_state_time = None
        while True:
            if queue.empty():
                time.sleep(RUNNER_RUN_CHECK_INTERVAL)
                now = time.monotonic()
                if most_current_execution_state_time is not None:
                    next_execution_state_mark = (
                        most_current_execution_state_time
                        + RUNNER_RUN_STATUS_INTERVAL
                    )
                if (
                    most_current_execution_state_time is None
                    or now > next_execution_state_mark
                ):
                    most_current_execution_state_time = now
                    yield messages.RunningMessage.get()
            else:
                message = queue.get()
                yield message
                if message.get("status") == "finished":
                    break
    except Exception as e:
        yield messages.StderrMessage.get(traceback.format_exc())
        yield messages.FinishedMessage.get(
            "error",
            fail_reason=str(e),
            fail_class=e.__class__.__name__,
            traceback=traceback.format_exc(),
        )