From 0f95798b6514bb2e493190f73c9526bd1a66806f Mon Sep 17 00:00:00 2001 From: Kento HASEGAWA Date: Tue, 27 Aug 2019 02:13:37 +0900 Subject: [PATCH] Make it possible to select merge solvers to use --- roles/host.py | 28 +++++++++++++++++++--------- roles/solver.py | 3 ++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/roles/host.py b/roles/host.py index 6858d26..cb5eade 100644 --- a/roles/host.py +++ b/roles/host.py @@ -57,15 +57,20 @@ class Host(object): return {'status': 'key error'} else: # request = Request(self.worker_manager, problem.get_dict(), solvers=solvers) - if solvers is None: - _solvers = self.worker_manager.get_workers() - else: - _solvers = dict() - for k, v in self.worker_manager.get_workers().items(): - if k in solvers: + merge_solvers = list() + # if solvers is None: + # _solvers = self.worker_manager.get_workers() + # else: + _solvers = dict() + for k, v in self.worker_manager.get_workers().items(): + if (solvers is None) or (k in solvers): + if v.role == 'merge_solver': + merge_solvers.append(k) + else: _solvers[k] = v + for _, v in _solvers.items(): - request = Request(self.worker_manager, problem.get_dict(), v) + request = Request(self.worker_manager, problem.get_dict(), v, merge_solvers=merge_solvers) request.broadcast() request_id = request.get_id() @@ -110,7 +115,10 @@ class Host(object): merge_problem['request_id'] = solution['request_id'] merge_problem['timeout'] = 10000 for k, v in self.worker_manager.workers.items(): - if v.role == 'merge_solver': + if ('merge_solvers' in solution) and (len(solution['merge_solvers']) > 0): + if k in solution['merge_solvers']: + v.post('solve', merge_problem) + elif v.role == 'merge_solver': v.post('solve', merge_problem) return {'status': 'done'} @@ -355,7 +363,7 @@ class Worker(object): class Request(object): - def __init__(self, worker_manager, data, worker, timeout=10000): + def __init__(self, worker_manager, data, worker, timeout=10000, merge_solvers=list()): # self.worker_manager = worker_manager self.data = data @@ -367,6 +375,7 @@ class Request(object): self.done_time = None self.solver = worker + self.merge_solvers = merge_solvers self.response = list() @@ -384,6 +393,7 @@ class Request(object): data = self.data data['request_id'] = self.request_id data['timeout'] = self.timeout + data['merge_solvers'] = self.merge_solvers return data def get_id(self): diff --git a/roles/solver.py b/roles/solver.py index 5745d10..85163ad 100644 --- a/roles/solver.py +++ b/roles/solver.py @@ -115,7 +115,8 @@ class Solver(object): data = { 'request_id': params['request_id'], 'problem': params['name'], - 'worker': self.address + 'worker': self.address, + 'merge_solvers': params['merge_solvers'] } data.update(solution) self.post('problem/solution', data) -- 2.22.0