我正在处理大量的项目组合(来自英雄联盟),大约 7200 万个,所有这些都被输入到一个计算它们有多大好处的函数中。
我们正在努力寻找可能的最佳组合。
忽略从算法上讲可能有更好的方法来做到这一点的事实,谁能告诉我为什么会出现内存错误?
allpossiblei = itertools.combinations(items.keys(),5)
maxc = 0
i = 0
for combo in allpossiblei:
icombo = [items[name] for name in combo]
res, tcost = calcStats(icombo, 0.658,100,100)
if res > maxc :
maxc = res
print str(res) + " " + str(res/tcost)
print combo
print float(i)/79208745.0
if i % 500000 == 0:
print str(float(i)/79208745.0) + "\n \n"
gc.collect()
i = i + 1
calcStats 除了使用局部变量进行算术运算之外什么都不做。
这会迅速消耗 2gb 以上的内存并在大约 5 分钟内退出。我认为 itertools 应该提供一个不会占用大量内存的生成器?我什至加入了那个 gc.collect() 语句,但它似乎不起作用。有任何想法吗?