В рамках небольшого проекта, использующего объектно-ориентированное программирование на Python. Я попытался сделать простую программу настройки / моделирования для вычислительного кластера. Кластер состоит из набора стоек, и каждая стойка состоит из 12 узлов каждая. Я почти закончил программу, хотя изо всех сил пытаюсь понять, почему это происходит и как ее решить.
Вся программа охватывает три класса: узел, стойку и кластер.
То, что я пытаюсь сделать здесь, - это создать метод, который проверяет, заполнена ли стойка (при условии, что она содержит 12 узлов), и, если это так, создайте новый экземпляр стойки, а затем заполните новый экземпляр стойки узлы.
Это соответствующий код для кластера
class Cluster:
def __init__(self, nodesPerRack, racks=[]):
self.nodesPerRack = nodesPerRack
self.racks = racks
def addNode(self, node):
if len(self.racks) == 0:
newRack = Rack()
self.racks.append(newRack)
print(len(self.racks))
for i in range(len(self.racks)):
if self.racks[i].getNodes() < self.nodesPerRack:
print("IM ADDING TO A RACK")
self.racks[i].settInn(node)
elif self.racks[i].getNodes() >= self.nodesPerRack:
print("New rack is being made")
newRack = Rack()
newRack.insertInto(node)
self.racks.append(newRack)
Если программа запущена, она, похоже, ничего не делает, и я подозреваю, что она генерирует бесчисленные экземпляры Rack или периодически проверяет, есть ли в стойке место (таким образом потребляя кучу оперативной памяти?)
Я пробовал несколько методов, и я начинаю подозревать, что диапазон, который он перебирает, не обновляется, он зависает, даже если добавлен новый элемент Rack, что должно обновить следующее утверждение
for i in range(len(self.racks)):
Как сделать так, чтобы цикл for обновлял свой диапазон? Я попытался с помощью следующего метода, используя цикл while
i = 0
while i < self.nodesPerRack:
do something
i += 1
По-прежнему возникает та же проблема, что и в цикле for.
Дополнительно здесь приведены соответствующие детали для Rack
class Rack:
def __init__(self, nodes=[]):
self.nodes = nodes
def addTo(self, node):
self.nodes.append(node)
и класс для Узла
class Node:
def __init__(self, minne, antPros):
self.minne = minne
self.antpros = antPros
Вот код, который я использовал для запуска теста
from node import Node
from rack import Rack
from cluster import Cluster
cluster = Cluster(12)
for i in range(0,650):
newNode = Node(64,1)
cluster.addNode(newNode)
for i in range(0,16):
newNode = Node(1024, 2)
cluster.addNode(newNode)