Example #1
0
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)
Example #2
0
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)