From 7d4068059840f524d5832e8664112582fec8b03a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Kr=C3=BCger?= Date: Wed, 9 Dec 2020 01:00:53 +0100 Subject: [PATCH] implemented mult iterations support --- al2/experiment.py | 2 +- al2/plan.py | 72 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/al2/experiment.py b/al2/experiment.py index be1a5ab..6e79c67 100644 --- a/al2/experiment.py +++ b/al2/experiment.py @@ -21,7 +21,7 @@ def load(exp_file): with open(exp_file) as efile: exp_obj = json.loads(efile.read()) exp_obj["load"] = pl.Path(exp_obj["load"]) - + exp_mod = impmach.SourceFileLoader(exp_obj["load"].stem, str(exp_obj["load"])).load_module() diff --git a/al2/plan.py b/al2/plan.py index f5f0956..f55fd14 100644 --- a/al2/plan.py +++ b/al2/plan.py @@ -28,13 +28,33 @@ class Plan: self.__load() def __create(self): + content = self.__create_content() + + self.pending_instances = content["pending"] + self.iterations_left = content["iterations_left"] + + with self.__lock: + self.__update_file() + + def __create_content(self, iterations_left = None): + content = {} + with open(self.experiment, "r") as expf: exp_obj = json.loads(expf.read()) instances = batch.load(pl.Path(exp_obj["batch"]).resolve()) + + if iterations_left == None: + if "iterations" in exp_obj: + iterations_left = exp_obj["iterations"] - 1 + else: + iterations_left = 0 + - self.pending_instances = instances - self.__update_file() + content["pending"] = instances + content["iterations_left"] = iterations_left + + return content def __set_file(self): @@ -59,6 +79,9 @@ class Plan: if "pending" in content: self.pending_instances = content["pending"] + + if "iterations_left" in content: + self.iterations_left = content["iterations_left"] def __is_finished(self): return False if self.file.is_file() else True @@ -69,7 +92,10 @@ class Plan: self.__load() if len(self.pending_instances) == 0: - return None + if self.iterations_left > 0: + self.__load_next_iteration() + else: + return None next_instance = self.pending_instances.pop() self.assigned_instances.append(next_instance) @@ -90,21 +116,45 @@ class Plan: def __update_file(self): content = {} + + all_done = True + + content["iterations_left"] = self.iterations_left if len(self.assigned_instances) > 0: - content["assigned"] = list(map(str, self.assigned_instances)) + content["assigned"] = self.assigned_instances + all_done = False if len(self.pending_instances) > 0: - content["pending"] = list(map(str, self.pending_instances)) + content["pending"] = self.pending_instances + all_done = False + + if all_done: + if self.iterations_left > 0: + self.__load_next_iteration() + elif self.file.is_file(): + self.file.unlink() + else: + self.__write_content(content) + + def __load_next_iteration(self): + content = self.__create_content(self.iterations_left - 1) - if content: - with open(self.file, "w") as pfile: - pfile.write(json.dumps(content)) + self.pending_instances = content["pending"] + self.iterations_left = content["iterations_left"] + + self.__write_content(content) + + def __write_content(self, content): + if "assigned" in content: + content["assigned"][:] = map(str, content["assigned"]) + + if "pending" in content: + content["pending"][:] = map(str, content["pending"]) - elif self.file.is_file(): - self.file.unlink() + with open(self.file, "w") as pfile: + pfile.write(json.dumps(content)) - #def __del__(self): def delete(self): with self.__lock: self.__load()