Hallo, ich habe ein Problem mit einem Skript, welches per pyglet und PIL Bilddateien einliest und darstellt. Das Einlesen geschieht in eine Warteschlange, wo die Bilder nacheinander abgespielt werden. Jetzt habe ich allerdings das Problem, dass dieses Skript bei Überschreiten einer gewissen Menge an Bildern, die im Speicher vorgehalten werden, einfach stehen bleibt. Es gibt also keine Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte? Grüße, Marc
Am 19.07.2010 23:41, schrieb Marc Rödder:
Jetzt habe ich allerdings das Problem, dass dieses Skript bei Überschreiten einer gewissen Menge an Bildern, die im Speicher vorgehalten werden, einfach stehen bleibt. Es gibt also keine Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte?
Auf welchem Betriebssystem läuft das denn? Verbraucht der Python-Prozess noch Rechenzeit, wenn das Programm stehen bleibt? Falls nicht, würde ich mal den Interpreter selbst unter die Lupe nehmen. Unter Linux kann man dafür beispielsweise die Prozess-ID mittels "ps aux" ermitteln und dann mittels "strace -f -p <Prozess-ID>" schauen, was der Interpreter gerade zu tun versucht. Den Prozess kann man jederzeit an strace attachen, aber man sollte bedenken, dass strace die Ausführung deutlich verlangsamt und dass es extrem viel ausgeben kann. Letzteres kann Dir leicht die Platte vollschreiben, wenn Du mit "-o" die Ausgabe in eine Datei umleitest. Ein anderer Ansatz wäre, das Script mittels pdb zu starten. Dort würde ich zunächst einmal "continue" sagen und, wenn es denn wieder eingefroren ist, beherzt Ctrl-C drücken. Dann siehst Du schon einmal, an welcher Stelle im Code sich der Interpreter gerade befand, und Du kannst aktuell besetzte Variablen inspizieren. Damit sollte man dann schon weiter kommen, und sei es nur so weit, dass man eine Ahnung bekommt, an welchen Stellen man noch mehr Debug-Ausschriebe in das Script stecken sollte, um den Fehler weiter einzugrenzen. [x] ulf -- Rome did not create a great empire by having meetings, they did it by killing all those who opposed them.
Hallo Ulf, danke, ich glaube das könnte mir schon sehr weiterhelfen! Interessant wäre es noch, genauer zu wissen, welche Methode oder welche Variable wieviel Speicher belegt...oder wo gerade von wem welcher Speicher angefordert wird. Gibts da auch irgendwas? Irgendwie scheint es mir nämlich so, als würde periodisch immer wieder Speicher angefordert und belegt, ohne dass es im Code irgendwo explizit geschieht. Dort sollte eigentlich direkt am Anfang der nötige Speicher belegt werden und danach konstant bleiben (theoretisch). Grüße, Marc Am 21.07.2010 um 14:22 schrieb Ulf Rompe:
Am 19.07.2010 23:41, schrieb Marc Rödder:
Jetzt habe ich allerdings das Problem, dass dieses Skript bei Überschreiten einer gewissen Menge an Bildern, die im Speicher vorgehalten werden, einfach stehen bleibt. Es gibt also keine Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte?
Auf welchem Betriebssystem läuft das denn? Verbraucht der Python-Prozess noch Rechenzeit, wenn das Programm stehen bleibt? Falls nicht, würde ich mal den Interpreter selbst unter die Lupe nehmen. Unter Linux kann man dafür beispielsweise die Prozess-ID mittels "ps aux" ermitteln und dann mittels "strace -f -p <Prozess-ID>" schauen, was der Interpreter gerade zu tun versucht. Den Prozess kann man jederzeit an strace attachen, aber man sollte bedenken, dass strace die Ausführung deutlich verlangsamt und dass es extrem viel ausgeben kann. Letzteres kann Dir leicht die Platte vollschreiben, wenn Du mit "-o" die Ausgabe in eine Datei umleitest.
Ein anderer Ansatz wäre, das Script mittels pdb zu starten. Dort würde ich zunächst einmal "continue" sagen und, wenn es denn wieder eingefroren ist, beherzt Ctrl-C drücken. Dann siehst Du schon einmal, an welcher Stelle im Code sich der Interpreter gerade befand, und Du kannst aktuell besetzte Variablen inspizieren. Damit sollte man dann schon weiter kommen, und sei es nur so weit, dass man eine Ahnung bekommt, an welchen Stellen man noch mehr Debug-Ausschriebe in das Script stecken sollte, um den Fehler weiter einzugrenzen.
[x] ulf
-- Rome did not create a great empire by having meetings, they did it by killing all those who opposed them.
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Jul 21, 2010, at 3:06 PM, Marc Rödder wrote:
Hallo Ulf,
danke, ich glaube das könnte mir schon sehr weiterhelfen! Interessant wäre es noch, genauer zu wissen, welche Methode oder welche Variable wieviel Speicher belegt...oder wo gerade von wem welcher Speicher angefordert wird. Gibts da auch irgendwas? Irgendwie scheint es mir nämlich so, als würde periodisch immer wieder Speicher angefordert und belegt, ohne dass es im Code irgendwo explizit geschieht. Dort sollte eigentlich direkt am Anfang der nötige Speicher belegt werden und danach konstant bleiben (theoretisch).
Schau dir mal pympler an - gearbeitet habe ich damit selbst aber noch nicht. Diez
participants (3)
-
Diez B. Roggisch
-
Marc Rödder
-
Ulf Rompe