Haben Sie ein Problem in Python und nicht sicher, wo Sie ein Speicherproblem zu debuggen beginnen. Unter Verwendung der Vorschläge von Antworten habe ich die Änderungen im Code vorgenommen und die Zeilen kommentiert, die vorher vorhanden waren:Python - Speicherproblem
Antwort
Sie bauen results
auf, bis es zu groß ist, um in den Speicher zu passen.
Die einfachste und unmittelbarste Lösung hierfür ist die Umwandlung von getORMClaims()
in einen Generator, wobei nacheinander jeweils ein Ergebnis anstelle der vollständig erstellten Liste aller Ergebnisse angezeigt wird. Befreien Sie sich von results
, und jedes Mal, wenn Sie etwas daran angehängt hätten, yield
das etwas stattdessen.
In Ihrem Fall würden Sie results.append(labels)
durch yield labels
ersetzen; und ersetzen results.append(result)
durch yield result
.
So ist es nicht schwer, das Speicherbelegungsproblem in getORMClaims()
loszuwerden, aber dann müssen Sie möglicherweise ändern, was auch immer es anruft, so dass es eine "Zeile" zu einer Zeit statt einer Liste behandeln kann von allen Reihen.
Zum Beispiel, wenn der Angerufene-Code sieht so etwas wie
for row in foo.getORMClaims():
writer.writerow(row)
dann sollten Sie sich gut, weil die Schleife bereits nur zu einem Zeitpunkt eine Zeile mit. Aber wenn es mehr wie
reportData = foo.getORMClaims()
sieht dann muss man herausfinden, wie von reportData
loszuwerden und verbraucht nur die Ausgabe von getORMClaims()
direkt in einer Schleife.
Wenn Sie noch nie zuvor von yield
oder dem Begriff Generator gehört haben, dann kann dies ein wenig verwirrend sein, und Sie müssen nur nach unten schnallen und über sie lesen. Eine Ressource ist this comprehensive Stack Overflow answer zu der Frage "What does the yield keyword do in Python?".
Laut Ihrer Antwort, ich glaube, alles, was ich tun muss, ist ersetzen mit "Ausbeute", da das aufrufende Programm eine for-Schleife hat. Bitte korrigieren Sie mich, wenn ich falsch liege. – user3224907
Nein, Sie müssen 'getORMClaims()' * direkt * in der 'for'-Schleife verwenden. Ihr Code weist das Ergebnis einer Variablen zu. Ihr Aufrufcode (entsprechend Ihrer letzten Änderung) sieht aus wie mein 'reportData = foo.getORMClaims()' Beispiel, nur haben Sie 'ocs' anstelle von' reportData' und 'vr' anstelle von' foo'. –
Ihre result
wird zu groß. Python kann nicht genügend Speicher zum Hinzufügen zuweisen.
Mehr als das ist unmöglich zu sagen, ohne den Quellcode und eine Erklärung dessen, was Sie erreichen möchten.
Ich habe den Quellcode hinzugefügt. – user3224907
- 1. Python tkinter .pack/.pack_forget Speicherproblem
- 2. MPMoviePlayerViewController Speicherproblem
- 3. Flex: Speicherproblem
- 4. Speicherproblem decodeObjectForKey (Swift-Projekt)
- 5. C/C++ Speicherproblem?
- 6. Speicherproblem von UITable
- 7. java static hashmap Speicherproblem
- 8. Speicherproblem im iPhone?
- 9. Speicherproblem von NSString
- 10. Speicherproblem in ARC
- 11. Einfaches lokales Speicherproblem
- 12. Java RMI tcp Speicherproblem
- 13. Warum C/C++ Speicherproblem?
- 14. FlowDocument Speicherproblem in C#
- 15. Speicherproblem iPad 4.2 Abstürze
- 16. scikit-learns LabelEncoder() Speicherproblem
- 17. Erstellen von Threads Speicherproblem
- 18. Speicherproblem mit Volley-Disk-Cache
- 19. Speicherproblem in SQLite-Datenbank iOS?
- 20. C++ Lambda-Funktion schließen - Speicherproblem
- 21. Kleines Speicherproblem mit Objective-C
- 22. Java 8 seltsames Timing/Speicherproblem
- 23. Ausnahmebedingung und Speicherproblem in SQL-Massenkopie
- 24. App stürzt bei einigen Geräten ab | Speicherproblem?
- 25. aus Speicherproblem, wenn Backup-Daten mit PHP
- 26. Speicherproblem beim Codieren einer NSDecimalNumber wie dies?
- 27. WIN32 Speicherproblem (Unterschiede zwischen Debug/Release)
- 28. Exportieren mit MEF in Caliburn.Micro - Speicherproblem erhöhen
- 29. Spielen! Framework auf Dokku Speicherproblem (Heap-Objekt)
- 30. Verwenden von Strace-Fixes hängen Speicherproblem
Wo ist der Code von 'ORMClaimReport.py'? –
Also, was machst du mit der Ausgabe von 'getORMClaims()'? –