Skip to main content
 首页 » 编程设计

Python itertools.combinations() 内存问题

2025年05月04日9dudu

我正在处理大量的项目组合(来自英雄联盟),大约有 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() 语句,但它似乎不起作用。有什么想法吗?

请您参考如下方法:

组合通过使用提供的整个迭代器创建一个池。没有办法解决这个问题。有关该功能,请参阅文档中的伪代码:http://docs.python.org/library/itertools.html#itertools.combinations