|
|
@ -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() |
|
|
|