Source code for fedn.network.loadbalancer.leastpacked

from fedn.network.combiner.interfaces import CombinerUnavailableError
from fedn.network.loadbalancer.loadbalancerbase import LoadBalancerBase


[docs] class LeastPacked(LoadBalancerBase): """Load balancer that selects the combiner with the least number of attached training clients. :param network: A handle to the network. :type network: class: `fedn.network.api.network.Network` """ def __init__(self, network): super().__init__(network)
[docs] def find_combiner(self): """Find the combiner with the least number of attached clients. """ min_clients = None selected_combiner = None for combiner in self.network.get_combiners(): try: if combiner.allowing_clients(): # Using default default Channel = 1, MODEL_UPDATE_REQUESTS nr_active_clients = len(combiner.list_active_clients()) if not min_clients or nr_active_clients < min_clients: min_clients = nr_active_clients selected_combiner = combiner except CombinerUnavailableError: pass return selected_combiner