ring_memory_weighted_partitioning_strategy.py 661 B

123456789101112131415161718
  1. from typing import List
  2. from .partitioning_strategy import PartitioningStrategy
  3. from .topology import Topology
  4. from .partitioning_strategy import Partition
  5. class RingMemoryWeightedPartitioningStrategy(PartitioningStrategy):
  6. def partition(self, topology: Topology) -> List[Partition]:
  7. nodes = list(topology.all_nodes())
  8. nodes.sort(key=lambda x: (x[1].memory, x[0]), reverse=True)
  9. total_memory = sum(node[1].memory for node in nodes)
  10. partitions = []
  11. start = 0
  12. for node in nodes:
  13. end = round(start + (node[1].memory/total_memory), 5)
  14. partitions.append(Partition(node[0], start, end))
  15. start = end
  16. return partitions