def METHOD_NAME(self, data_model):
    """
    Internal start, for the moment executed in greenlet
    """
    try:
        self._set_started()
        self._pre_execute(data_model)
        self._execute(data_model)
    except Exception as ex:
        self._state = ProcedureState.ERROR
        self._msg = "Procedure execution error (%s)" % str(ex)
        logging.getLogger("HWR").exception(self._msg)
    finally:
        try:
            self._post_execute(data_model)
        except Exception as ex:
            self._state = ProcedureState.ERROR
            self._msg = "Procedure post_execute error (%s)" % str(ex)
            logging.getLogger("HWR").exception(self._msg)
        self._ready_event.set()
        if self._state == ProcedureState.ERROR:
            self._set_error()
        else:
            self._set_successful()