def start_group_experiments(self, experiment_group_id): try: experiment_group = ExperimentGroup.objects.get(id=experiment_group_id) except ExperimentGroup.DoesNotExist: logger.info( 'ExperimentGroup `{}` was not found.'.format(experiment_group_id)) if self.request.retries < 2: logger.info('Trying again for ExperimentGroup `{}`.'.format( experiment_group_id)) self.retry(countdown=Intervals.EXPERIMENTS_SCHEDULER) logger.info('Something went wrong, ' 'the ExperimentGroup `{}` does not exist anymore.'.format( experiment_group_id)) return pending_experiments = list(experiment_group.pending_experiments) experiment_to_start = experiment_group.n_experiments_to_start if experiment_group.search_method == SEARCH_METHODS.RANDOM: shuffle(pending_experiments) while experiment_to_start > 0 and pending_experiments: experiment = pending_experiments.pop() build_experiment.delay(experiment_id=experiment.id) experiment_to_start -= 1 if pending_experiments: # Schedule another task self.retry(countdown=Intervals.EXPERIMENTS_SCHEDULER)
def start_group_experiments(self, experiment_group_id): experiment_group = _get_group_ro_retry(experiment_group_id=experiment_group_id, task=self) if not experiment_group: return # Check for early stopping before starting new experiments from this group if experiment_group.should_stop_early(): stop_group_experiments(experiment_group_id=experiment_group_id, pending=True, message='Early stopping') return experiment_to_start = experiment_group.n_experiments_to_start pending_experiments = experiment_group.pending_experiments[:experiment_to_start] n_pending_experiment = experiment_group.pending_experiments.count() for experiment in pending_experiments: build_experiment.delay(experiment_id=experiment.id) if n_pending_experiment - experiment_to_start > 0: # Schedule another task self.retry(countdown=Intervals.EXPERIMENTS_SCHEDULER)