2017-08-01 3 views
0

Ich benutze ein Skript, das viele Stunden lang ausgeführt wird und Anweisungen ausgibt, um zu überprüfen, ob Probleme aufgetreten sind (Daten werden aus dem Internet heruntergeladen und manchmal verzerrt). .Löschen des Terminalfensters in Python, Speicher/Leistung

Ich habe nach einer Weile einen deutlichen Leistungsabfall festgestellt. Ich vermute, dass die vielen tausend Zeilen von Druckanweisungen der Grund dafür sein könnten.

Es ist allgemein bekannt, dass das Endgerät durch die folgende Codezeile dieser Druckanweisungen gelöscht werden:

import os 
os.system('cls') # for windows 

Dennoch vermute ich, dass dies nicht tatsächlich die Leistung Geschwindigkeit verbessern, und dass es ist nur eine wahrgenommene Verbesserung aufgrund der Tatsache, dass der Bildschirm gelöscht wird. Ist das wahr oder nicht?

Ich habe auch mit dem folgenden Code unterdrückt bestimmte Druck Aussagen betrachtet:

import sys 
class NullWriter(object): 
def write(self, arg): 
    pass 
nullwrite = NullWriter() 
oldstdout = sys.stdout 
sys.stdout = oldstdout # enable output 
print("text that I want to see") 
sys.stdout = nullwrite # disable output 
print("text I don't want to see") 

Meine Frage: Wie kann ich die Performance (Geschwindigkeit) von meinem Skript, da ich immer noch die am meisten sehen will aktuelle Druckanweisungen?

+2

können Sie die Ausgabe in eine Datei protokollieren und tun dann Tail -f, um die Ausgabe zu sehen gestreamt. –

+1

Bitte beheben Sie Ihre Einrückung – marcadian

+0

ja, das Drucken auf Bildschirm verlangsamt Ihr Programm, wenn es viele Ausgaben gibt. –

Antwort

0

Wenn Sie möchten, können Sie einfach ohne Wagenrücklauf einen Zeilenvorschub tun und die letzte Zeile außer Kraft setzen:

sys.stdout.write("\rDoing things") 
sys.stdout.flush() 

Druck im Laufe der Zeit keine zusätzlichen Speicher in Python verwenden sollten, aber Sie könnten Ihre Terminals haben Puffer auf high gesetzt, der viel Speicher belegen kann. Oder es braucht nur Zeit, um den Puffer zu leeren, weil Sie so schnell auf stdout schreiben.

können Sie auch die Funktion Drucken verwenden

Python 2.6+

Von Python 2.6 Sie 3, um die Druckfunktion von Python importieren:

from __future__ import print_function 

Auf diese Weise können Sie die Python 3 verwenden, Lösung unten.

Python 3

In Python 3 hat die print-Anweisung in einer Funktion geändert. In Python 3 können Sie stattdessen:

Verwandte Themen