Python - 内存问题

时间:2016-05-16 14:00:12

标签: python

在Python中遇到问题但不确定从哪里开始调试内存问题。使用答案中的建议我已经对代码进行了更改,并对先前已有的行进行了评论:

2 个答案:

答案 0 :(得分:1)

您的result变得太大了。 Python无法分配足够的内存来添加它。

如果没有源代码并且解释您要完成的任务,那么就不可能这样说了。

答案 1 :(得分:1)

你不断积累results,直到它太大而无法放入内存。

最简单,最直接的解决方法是将getORMClaims()转换为生成器,一次产生一个结果,而不是完全形成的所有结果列表。摆脱results,每次你都要添加一些东西,yield代替它。

在您的情况下,您会将results.append(labels)替换为yield labels;并将results.append(result)替换为yield result

因此,在getORMClaims()中消除内存使用问题并不困难,但是你可能还必须改变调用它的内容,以便它可以一次处理一个“行”所有行的列表。

例如,如果调用代码看起来像

for row in foo.getORMClaims():
    writer.writerow(row)

然后你应该没事,因为循环一次只使用一行。但如果它看起来更像

reportData = foo.getORMClaims()

然后你必须弄清楚如何摆脱reportData并直接在循环中消耗getORMClaims()的输出。

如果您之前从未听说过yield generator 一词,那么这可能会让您感到有些困惑,您只需要了解它们并阅读它们。问题this comprehensive Stack Overflow answer的一个资源是"What does the yield keyword do in Python?"