@logging.log_task_wrapper(LOG.info, _("Benchmarking."))
    def run(self):
        self.task.update_status(consts.TaskStatus.RUNNING)

        for subtask in self.config.subtasks:
            for pos, workload in enumerate(subtask.workloads):

                if ResultConsumer.is_task_in_aborting_status(
                        self.task["uuid"]):
                    LOG.info("Received aborting signal.")
                    self.task.update_status(consts.TaskStatus.ABORTED)
                    return

                key = workload.make_key(pos)
                LOG.info("Running benchmark with key: \n%s"
                         % json.dumps(key, indent=2))
                runner_obj = self._get_runner(workload.runner)
                context_obj = self._prepare_context(
                    workload.context, workload.name, self.admin)
                try:
                    with ResultConsumer(key, self.task, runner_obj,
                                        self.abort_on_sla_failure):
                        with context.ContextManager(context_obj):
                            runner_obj.run(workload.name, context_obj,
                                           workload.args)
                except Exception as e:
                    LOG.exception(e)

        if objects.Task.get_status(
                self.task["uuid"]) != consts.TaskStatus.ABORTED:
            self.task.update_status(consts.TaskStatus.FINISHED)
Implementations must override this to provide a method with which one
dataset/ETHPy150Open openstack/rally/rally/task/engine.py/TaskEngine.run--crossover with--dataset/ETHPy150Open RoseOu/flasky/venv/lib/python2.7/site-packages/wtforms/csrf/core.py/CSRF.generate_csrf_token