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