def METHOD_NAME(self, tasks):
    self.advance_tasks(tasks, rps.AGENT_EXECUTING, publish=True, push=False)
    for task in tasks:
        try:
            self._prof.prof('task_start', uid=task['uid'])
            self._handle_task(task)
        except Exception as e:
            self._log.exception("error running Task")
            task['exception']        = repr(e)
            task['exception_detail'] = '\n'.join(ru.get_exception_trace())
            # can't rely on the executor base to free the task resources
            self._prof.prof('unschedule_start', uid=task['uid'])
            self.publish(rpc.AGENT_UNSCHEDULE_PUBSUB, task)
            self.advance_tasks(task, rps.FAILED, publish=True, push=False)
    with self._tasks_lock:
        self._tasks.extend(tasks)