def test_restarting_an_experiment(self): with patch('runner.tasks.experiments.build_experiment.apply_async' ) as _: # noqa experiment1 = ExperimentFactory() # We create some outputs files for the experiment path = create_experiment_outputs_path(experiment1.unique_name) open(os.path.join(path, 'file'), 'w+') # Create a new experiment that is a clone of the previous with patch('runner.tasks.experiments.build_experiment.apply_async' ) as _: # noqa experiment2 = ExperimentFactory(original_experiment=experiment1) # Check that outputs path for experiment2 does not exist yet experiment2_outputs_path = get_experiment_outputs_path( experiment2.unique_name) assert os.path.exists(experiment2_outputs_path) is False # Handle restart should create the outputs and copy the content of experiment 1 handle_restarted_experiment(experiment2) assert os.path.exists(experiment2_outputs_path) is True assert os.path.exists(os.path.join(experiment2_outputs_path, 'file')) is True
def start_experiment(experiment_id): experiment = get_valid_experiment(experiment_id=experiment_id) if not experiment: return # Check if we need to restart an experiment if experiment.is_clone: handle_restarted_experiment(experiment) else: create_experiment_outputs_path(experiment.unique_name) experiment_scheduler.start_experiment(experiment)
def start_experiment(experiment_id): experiment = get_valid_experiment(experiment_id=experiment_id) if not experiment: logger.info( 'Something went wrong, ' 'the Experiment `%s` does not exist anymore.', experiment_id) return if not ExperimentLifeCycle.can_transition( status_from=experiment.last_status, status_to=ExperimentLifeCycle.SCHEDULED): logger.info('Experiment id `%s` cannot transition from `%s` to `%s`.', experiment_id, experiment.last_status, ExperimentLifeCycle.BUILDING) return None # Check if we need to restart an experiment if experiment.is_clone: handle_restarted_experiment(experiment) else: create_experiment_outputs_path(experiment.unique_name) experiment_scheduler.start_experiment(experiment)