def METHOD_NAME(self, job_group_dict):
    """Receive a group of jobs in a list format and executes them one by
    one.
    job_group_dict ({}): a JobGroup exported to dict.
    return ({}): the same JobGroup in dict format, but containing
        the results.
    """
    start_time = time.time()
    job_group = JobGroup.import_from_dict(job_group_dict)
    if self.work_lock.acquire(False):
        try:
            logger.info("Starting job group.")
            for job in job_group.jobs:
                logger.info("Starting job.",
                            extra={"operation": job.info})
                job.shard = self.shard
                if self._fake_worker_time is None:
                    task_type = get_task_type(job.task_type,
                                              job.task_type_parameters)
                    try:
                        task_type.execute_job(job, self.file_cacher)
                    except TombstoneError:
                        job.success = False
                        job.plus = {"tombstone": True}
                else:
                    self._fake_work(job)
                logger.info("Finished job.",
                            extra={"operation": job.info})
            logger.info("Finished job group.")
            return job_group.export_to_dict()
        except Exception as e:
            err_msg = "Worker failed: %s." % e
            logger.error(err_msg, exc_info=True)
            raise JobException(err_msg)
        finally:
            self._finalize(start_time)
            self.work_lock.release()
    else:
        err_msg = "Request received, but declined because of acquired " \
            "lock (Worker is busy executing another job, this should " \
            "not happen: check if there are more than one ES running, " \
            "or for bugs in ES."
        logger.warning(err_msg)
        self._finalize(start_time)
        raise JobException(err_msg)