Я делаю программу установки для вычислительного кластера. Где кластер состоит из трех классов, кластера, стойки и узла.
В кластере находится набор стоек, а в стойке - набор узлов. До сих пор я обнаружил и сделал большинство методов, которые я хочу иметь, однако один из методов должен проверить, может ли стойка содержать узел, и если да, добавить узел в список стойки. Смотрите следующий код
from node import Node
from rack import Rack
class Cluster:
def __init__(self, noderPerRack, racks):
self.noderPerRack = nodesPerRack
self.racks = []
if len(self.racks) == 0:
newRack= Rack()
self.racks.append(nyRack)
def insertInto(self, node):
for rack in self.racks:
if rack.getNodes() < self.nodesPerRack:
rack.insertInto(node)
print(rack.getNodes())
elif rack.getNodes() == self.nodesPerRack:
print("Amount of racks", len(self.racks))
self.racks.append(Rack([]))
Желаемое поведение выглядит следующим образом:
Если в стойку добавлено менее двенадцати узловых объектов, она будет добавлять узлы, пока в стойке не будет двенадцать узлов. Если в стойке двенадцать узлов, она создаст новую стойку, добавит себя в список, который обрабатывает стойки, который является списком:
self.racks
Однако, когда я пишу код и выполняю его, он успешно добавит двенадцать узлов к самой первой стойке в соответствии с желаемым поведением, но когда будет создана новая стойка, он примет только один узел, а затем создаст новую стойку , последующая стойка примет 2 узла и пр. Даже при том, что у меня есть проверка, которая должна проверить, равна ли она двенадцати (то есть self.nodesPerRack
), вывод выглядит следующим образом:
1
2
3
4
5
6
7
8
9
10
11
12
Amount of racks 1
1
Amount of racks 2
2
1
Почему это происходит? И как это можно исправить? Я попытался использовать другие операторы управления, такие как цикл while таким образом
while rack.getNodes() < self.nodesPerRack:
rack.insertInto(node)
Что просто ведет к вечно работающему циклу, хотя в одной точке значение
rack.getNodes()
будет больше
self.nodesPerRack
Кроме того, вот соответствующие детали для класса Rack:
from node import Node
class Rack:
def __init__(self, nodes):
self.nodes = []
def insertInto(self, node):
self.nodes.append(node)
def getNodes(self):
nodecounter = 0
for i in range(len(self.nodes)):
nodecounter += 1
return nodecounter
Вот код для класса Node:
class Node:
def __init__(self, minne, antPros):
self.minne = minne
self.antpros = antPros
def antPros(self):
return self.antpros
def nokminne(self, paakrevetMinne):
if self.minne >= paakrevetMinne:
return True
else:
return False
и эта программа используется для проверки классов
from node import Node
from rack import Rack
from cluster import Cluster
cluster = Cluster(12, [])
for i in range(14):
newNode = Node(64,1)
cluster.insertInto(newNode)