在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()'的輸出呢? –