在Python中遇到问题并且不确定从哪里开始调试内存问题。使用答案中的建议我已对代码进行了更改,并评论了以前的代码行:Python - 内存问题
回答
你一直在积累results
,直到它太大,不适合内存。
最简单,最直接的解决方法是将getORMClaims()
变成一个生成器,一次产生一个结果,而不是所有结果的完整列表。摆脱results
,并且每次你将附加的东西给它,yield
那东西代替。
在你的情况下,你会用yield labels
替换results.append(labels)
;并用yield result
代替results.append(result)
。
因此,在getORMClaims()
内部摆脱内存使用问题并不困难,但是您可能还必须更改所有调用它的内容,以便它可以处理一次接收一个“行”而不是列表的所有行。
例如,如果调用代码看起来像
for row in foo.getORMClaims():
writer.writerow(row)
那么你应该罚款,因为循环已经只用一行在同一时间。但是,如果它看起来更像
reportData = foo.getORMClaims()
那么你必须弄清楚如何摆脱reportData
,只是消耗的getORMClaims()
的直接输出在一个循环。
如果你从来没有听说过的yield
或术语发电机之前,那么这可能是一个有点混乱,你就只能扣下来,阅读它们。一个资源是this comprehensive Stack Overflow answer到问题"What does the yield keyword do in Python?"。
根据你的回答,我相信我所需要做的就是用'yield'来代替,因为调用程序有一个for循环。如果我错了,请纠正我。 – user3224907
不,您必须在'for'循环中直接使用'getORMClaims()'* *。您的代码将结果分配给一个变量。你的调用代码(根据你最近的编辑)看起来像我的'reportData = foo.getORMClaims()'例子,只是你有'ocs'而不是'reportData'和'vr'而不是'foo'。 –
- 1. python内存问题
- 2. Python内存问题
- 3. Pyspark内存问题
- 4. Opencv(Python)内存使用问题
- 5. Python的内存问题与BeautifulSoup
- 6. Python,GTK,Webkit和刮,大内存问题
- 7. Python/Numpy C++扩展:内存问题
- 8. Python tkinter .pack/.pack_forget内存问题
- 9. 优化Python:大数组,内存问题
- 10. Python Google Calendar API内存问题
- 11. 内存问题?
- 12. 内存问题
- 13. 内存问题
- 14. ReportLab和Python Imaging Library从内存问题的图像问题
- 15. Python27内存错误问题
- 16. ValueAnimator内存问题
- 17. Apache内存问题
- 18. ScrollView内存问题
- 19. Android内存问题
- 20. FragmentStatePagerAdapter内存问题
- 21. 内存问题iphone
- 22. iphone内存问题
- 23. UIImageView - 内存问题
- 24. IntelliJ内存问题
- 25. Prolog内存问题
- 26. ListView内存问题
- 27. PHP内存问题
- 28. imagecreatefromjpeg内存问题
- 29. Grails内存问题
- 30. UIAlertView内存问题
'ORMClaimReport.py'的代码在哪里? –
那么你如何处理'getORMClaims()'的输出呢? –