Pythonitertools.组合()内存问题

2024-10-03 00:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理大量的项目组合(来自传奇联盟),大约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.收集()声明,但似乎不起作用。有什么想法吗?在


Tags: 内存nameinforitemsresprintitertools