Spaces:
Sleeping
Sleeping
import random | |
class NaiveResourceManager(object): | |
r""" | |
Overview: | |
the naive resource manager | |
Interface: | |
__init__, assign_collector, assign_learner, update | |
""" | |
def __init__(self) -> None: | |
r""" | |
Overview: | |
init the resouce manager | |
""" | |
self._worker_type = ['collector', 'learner'] | |
self._resource_info = {k: {} for k in self._worker_type} | |
def assign_collector(self, collector_task: dict) -> dict: | |
r""" | |
Overview: | |
assign the collector_task randomly and return the resouce info | |
Arguments: | |
- collector_task (:obj:`dict`): the collector task to assign | |
""" | |
available_collector_list = list(self._resource_info['collector'].keys()) | |
if len(available_collector_list) > 0: | |
selected_collector = random.sample(available_collector_list, 1)[0] | |
info = self._resource_info['collector'].pop(selected_collector) | |
return {'collector_id': selected_collector, 'resource_info': info} | |
else: | |
return None | |
def assign_learner(self, learner_task: dict) -> dict: | |
r""" | |
Overview: | |
assign the learner_task randomly and return the resouce info | |
Arguments: | |
- learner_task (:obj:`dict`): the learner task to assign | |
""" | |
available_learner_list = list(self._resource_info['learner'].keys()) | |
if len(available_learner_list) > 0: | |
selected_learner = random.sample(available_learner_list, 1)[0] | |
info = self._resource_info['learner'].pop(selected_learner) | |
return {'learner_id': selected_learner, 'resource_info': info} | |
else: | |
return None | |
def have_assigned(self, name: id, worker_id: str) -> bool: | |
assert name in self._worker_type, "invalid worker_type: {}".format(name) | |
if name == 'collector': | |
return worker_id in self._resource_info['collector'] | |
elif name == 'learner': | |
return worker_id in self._resource_info['learner'] | |
def delete(self, name: id, worker_id: str) -> bool: | |
assert name in self._worker_type, "invalid worker_type: {}".format(name) | |
if worker_id in self._resource_info[name]: | |
self._resource_info.pop(worker_id) | |
return True | |
else: | |
return False | |
def update(self, name: str, worker_id: str, resource_info: dict) -> None: | |
r""" | |
Overview: | |
update the reource info | |
""" | |
assert name in self._worker_type, "invalid worker_type: {}".format(name) | |
self._resource_info[name][worker_id] = resource_info | |