Loading roles/host.py +51 −10 Changes for roles/host.py: 51 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -93,7 +93,11 @@ class Host(object): def store_solution(self, solution): if 'part_id' in solution: request_id = solution['request_id'] if solution['status'] != 'done': if request_id in self.request: self.request[request_id].store_failed(solution) return {'status': 'ignored'} problem_key = solution['problem'] Loading @@ -102,14 +106,14 @@ class Host(object): self.request[request_id].store_response(solution) if problem_key in self.problems: res = self.problems[problem_key].put_partial_solution(solution) parts_valid = self.problems[problem_key].put_partial_solution(solution) else: res = False parts_valid = False print(solution['solution']) print(solution['line_map'], solution['block_map']) if res: if parts_valid and self.request[request_id].is_receive_completed: merge_problem = self.problems[problem_key].partial_merge_problem # print(merge_problem) merge_problem['request_id'] = solution['request_id'] Loading Loading @@ -207,6 +211,9 @@ class Host(object): return {} elif cmd == 'cancel': self.worker_manager.request_cancel(params) _requests = self.problem_to_request[params['problem']] for r in _requests: self.request[r].cancel() return {'status': 'canceled'} elif cmd == 'worker/reset': self.worker_manager.reset_worker(params['address']) Loading Loading @@ -364,7 +371,6 @@ class Worker(object): class Request(object): def __init__(self, worker_manager, data, worker, timeout=10000, merge_solvers=list()): # self.worker_manager = worker_manager self.data = data self.timeout = timeout Loading @@ -382,9 +388,11 @@ class Request(object): if self.solver.partial_mode: self.part_nums = len(data['group_problems']) self.solved = [0 for v in range(self.part_nums + 1)] # self.received = [0 for v in range(self.part_nums)] else: self.part_nums = 1 self.solved = [0] # self.received = [] self.is_processed = False Loading @@ -396,6 +404,14 @@ class Request(object): data['merge_solvers'] = self.merge_solvers return data # @property # def is_receive_completed(self): # return all([v>0 for v in self.received]) @property def is_receive_completed(self): return all([v!=0 for v in self.solved[:-1]]) def get_id(self): return self.request_id Loading @@ -407,10 +423,25 @@ class Request(object): if self.start_time is None: self.start_time = time.time() def cancel(self): if self.solved[-1] == 0: self.solved[-1] = -1 def store_failed(self, data): self.response.append(data) if 'part_id' in data: idx = data['part_id'] self.solved[idx] = -1 if all([v!=0 for v in self.solved[:-1]]) and any([v<0 for v in self.solved[:-1]]): self.solved[-1] = -1 self.done_time = time.time() else: self.solved[-1] = -1 self.done_time = time.time() def store_response(self, data): # worker = data['worker'] # self.response[worker].append(data) # self.response[worker] = data self.response.append(data) print(data) if 'part_id' in data: Loading @@ -420,8 +451,9 @@ class Request(object): self.solved[idx] = 1 else: self.solved[idx] = -1 if all([v!=0 for v in self.solved]) and any([v<0 for v in self.solved]): if all([v!=0 for v in self.solved[:-1]]) and any([v<0 for v in self.solved[:-1]]): self.solved[-1] = -1 self.done_time = time.time() else: if data['status'] == 'done': self.solved[-1] = 1 Loading @@ -443,10 +475,15 @@ class Request(object): elif self.solved[-1] == -1: if self.start_time is None: self.start_time = time.time() counter = sum([v!=0 for v in self.solved]) fail_counter = sum([v<0 for v in self.solved]) if self.done_time is None: status = f'canceled ({counter}<!{fail_counter}>/{len(self.solved)} done)' else: elapsed_time = self.done_time - self.start_time et_minutes = int(elapsed_time // 60) et_seconds = int(elapsed_time % 60) status = f'failed [{et_minutes}:{et_seconds:02}]' status = f'failed ({counter}<!{fail_counter}>/{len(self.solved)} done) [{et_minutes}:{et_seconds:02}]' else: if self.solver.status == 'Not connected': status = 'Not connected' Loading @@ -455,7 +492,11 @@ class Request(object): if len(self.solved) == 1: status_mes = 'Running' elif len(self.solved) > 1: counter = sum([v>0 for v in self.solved]) counter = sum([v!=0 for v in self.solved]) fail_counter = sum([v<0 for v in self.solved]) if fail_counter > 0: status_mes = f'{counter}<!{fail_counter}>/{len(self.solved)}' else: status_mes = f'{counter}/{len(self.solved)}' if self.start_time is None: Loading utils/data.py +0 −1 Changes for utils/data.py: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -387,7 +387,6 @@ class Problem(object): with open(outpath, 'w') as fp: json.dump(self.get_dict(), fp, indent=4) # print([len(v)>0 for v in self.partial_solutions]) if all([len(v)>0 for v in self.partial_solutions]): return True else: Loading Loading
roles/host.py +51 −10 Changes for roles/host.py: 51 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -93,7 +93,11 @@ class Host(object): def store_solution(self, solution): if 'part_id' in solution: request_id = solution['request_id'] if solution['status'] != 'done': if request_id in self.request: self.request[request_id].store_failed(solution) return {'status': 'ignored'} problem_key = solution['problem'] Loading @@ -102,14 +106,14 @@ class Host(object): self.request[request_id].store_response(solution) if problem_key in self.problems: res = self.problems[problem_key].put_partial_solution(solution) parts_valid = self.problems[problem_key].put_partial_solution(solution) else: res = False parts_valid = False print(solution['solution']) print(solution['line_map'], solution['block_map']) if res: if parts_valid and self.request[request_id].is_receive_completed: merge_problem = self.problems[problem_key].partial_merge_problem # print(merge_problem) merge_problem['request_id'] = solution['request_id'] Loading Loading @@ -207,6 +211,9 @@ class Host(object): return {} elif cmd == 'cancel': self.worker_manager.request_cancel(params) _requests = self.problem_to_request[params['problem']] for r in _requests: self.request[r].cancel() return {'status': 'canceled'} elif cmd == 'worker/reset': self.worker_manager.reset_worker(params['address']) Loading Loading @@ -364,7 +371,6 @@ class Worker(object): class Request(object): def __init__(self, worker_manager, data, worker, timeout=10000, merge_solvers=list()): # self.worker_manager = worker_manager self.data = data self.timeout = timeout Loading @@ -382,9 +388,11 @@ class Request(object): if self.solver.partial_mode: self.part_nums = len(data['group_problems']) self.solved = [0 for v in range(self.part_nums + 1)] # self.received = [0 for v in range(self.part_nums)] else: self.part_nums = 1 self.solved = [0] # self.received = [] self.is_processed = False Loading @@ -396,6 +404,14 @@ class Request(object): data['merge_solvers'] = self.merge_solvers return data # @property # def is_receive_completed(self): # return all([v>0 for v in self.received]) @property def is_receive_completed(self): return all([v!=0 for v in self.solved[:-1]]) def get_id(self): return self.request_id Loading @@ -407,10 +423,25 @@ class Request(object): if self.start_time is None: self.start_time = time.time() def cancel(self): if self.solved[-1] == 0: self.solved[-1] = -1 def store_failed(self, data): self.response.append(data) if 'part_id' in data: idx = data['part_id'] self.solved[idx] = -1 if all([v!=0 for v in self.solved[:-1]]) and any([v<0 for v in self.solved[:-1]]): self.solved[-1] = -1 self.done_time = time.time() else: self.solved[-1] = -1 self.done_time = time.time() def store_response(self, data): # worker = data['worker'] # self.response[worker].append(data) # self.response[worker] = data self.response.append(data) print(data) if 'part_id' in data: Loading @@ -420,8 +451,9 @@ class Request(object): self.solved[idx] = 1 else: self.solved[idx] = -1 if all([v!=0 for v in self.solved]) and any([v<0 for v in self.solved]): if all([v!=0 for v in self.solved[:-1]]) and any([v<0 for v in self.solved[:-1]]): self.solved[-1] = -1 self.done_time = time.time() else: if data['status'] == 'done': self.solved[-1] = 1 Loading @@ -443,10 +475,15 @@ class Request(object): elif self.solved[-1] == -1: if self.start_time is None: self.start_time = time.time() counter = sum([v!=0 for v in self.solved]) fail_counter = sum([v<0 for v in self.solved]) if self.done_time is None: status = f'canceled ({counter}<!{fail_counter}>/{len(self.solved)} done)' else: elapsed_time = self.done_time - self.start_time et_minutes = int(elapsed_time // 60) et_seconds = int(elapsed_time % 60) status = f'failed [{et_minutes}:{et_seconds:02}]' status = f'failed ({counter}<!{fail_counter}>/{len(self.solved)} done) [{et_minutes}:{et_seconds:02}]' else: if self.solver.status == 'Not connected': status = 'Not connected' Loading @@ -455,7 +492,11 @@ class Request(object): if len(self.solved) == 1: status_mes = 'Running' elif len(self.solved) > 1: counter = sum([v>0 for v in self.solved]) counter = sum([v!=0 for v in self.solved]) fail_counter = sum([v<0 for v in self.solved]) if fail_counter > 0: status_mes = f'{counter}<!{fail_counter}>/{len(self.solved)}' else: status_mes = f'{counter}/{len(self.solved)}' if self.start_time is None: Loading
utils/data.py +0 −1 Changes for utils/data.py: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -387,7 +387,6 @@ class Problem(object): with open(outpath, 'w') as fp: json.dump(self.get_dict(), fp, indent=4) # print([len(v)>0 for v in self.partial_solutions]) if all([len(v)>0 for v in self.partial_solutions]): return True else: Loading