我正在为计算集群制作安装程序。其中群集由三个类组成,一个群集,一个机架和一个节点。
集群中包含一组机架,而机架中包含一组节点。到目前为止,我已经找到并完成了大多数我想拥有的方法,但是其中一种方法应该检查机架是否可以容纳节点,如果可以,请将该节点添加到机架列表中。请参阅以下代码
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)