
Mir ist mehrmals aufgefallen, dass ein einfaches Python-Skript (mit einigen einfachen algebraischen Berechnungen in einer Schleife) erheblich schneller läuft (bis zu einem Faktor 6), wenn es über eine Shell-Befehlszeile gestartet wird, als über die IDLE-Shell. Im Skript passiert nichts Besonderes. Ich drucke nur eine Schleifenvariable aus, um den Fortschritt in der Schleife visuell zu verfolgen.
Diese Print-Anweisung allein kann doch nicht der Grund für den Geschwindigkeitsverlust im IDLE sein, oder doch?
Kann mir jemand erklären, warum das so ist?
Antwort1
Ja, die Druckanweisung ist tatsächlich die Hauptursache für die Verlangsamung im Leerlauf. Die Stdout- und Stderr-Streams werden von IDLE erfasst und eine ganze Reihe von Tk-Befehlen werden ausgeführt, um den Text entsprechend darzustellen. Das Entfernen Ihrer Ausgabe auf Stdout sollte die Dinge wieder beschleunigen.
Sehen Sie sich dieidlelib.PyShell,idlelib.Ausgabefenster, Undidlelib.EditorWindowModule für (einen Teil) des Ausmaßes des Kaninchenbaus …
Ich empfehle die Verwendung vonProtokollierungModul zum Aufzeichnen des Fortschritts. Sie können dann die Protokollierungsebene beim Ausführen im IDLE-Modus auf einen höheren Wert einstellen, um die Ausgabe in diesem Zustand zu vermeiden, oder an einem anderen Ort als stdout protokollieren.
obwohl ichWirklichwürde es nicht empfehlen, so etwas wie das Folgende funktioniert wahrscheinlicham meistender Zeit, wenn Sie das Verhalten beim Ausführen im IDLE-Modus wirklich anders konfigurieren möchten. Obwohl Sie das wirklich nicht sollten :-)
import sys
running_under_idle = 'idlelib' in sys.modules