2017-08-01 1 views
0

J'utilise un script qui s'exécute pendant plusieurs heures, qui imprime des instructions pour vérifier si des problèmes ont pu apparaître (données téléchargées sur le web, parfois déformées) .Effacement de la fenêtre de terminal en Python, mémoire/performance

J'ai remarqué une baisse significative des performances après un certain temps. Je soupçonne que les milliers de lignes de déclarations d'impression pourraient être la raison.

Il est bien connu que le terminal peut être effacé de ces états d'impression par la ligne de code suivante:

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

encore, je pense que cela ne fait améliorer la vitesse d'exécution et que c'est simplement une amélioration perçue en raison du fait que l'écran est effacé. Est-ce vrai ou pas?

J'ai aussi considéré supprimer certaines déclarations d'impression avec le code suivant:

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") 

Ma question: Comment puis-je améliorer les performances (vitesse) de mon script, étant donné que je veux encore voir le plus déclarations d'impression récentes?

+2

Vous pouvez enregistrer la sortie dans un fichier, puis faire queue -f pour voir la sortie en streaming. –

+1

s'il vous plaît corriger votre indentation – marcadian

+0

oui, l'impression à l'écran ralentit votre programme s'il y a beaucoup de sortie. –

Répondre

0

Si vous le souhaitez, vous pouvez juste faire un saut de ligne sans retour chariot et remplacer la dernière ligne:

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

impression au fil du temps ne doit pas utiliser une mémoire supplémentaire dans python, mais vous pourriez avoir de terminal tampon réglé à haute qui peut utiliser beaucoup de mémoire. Ou c'est juste prendre le temps de vider le tampon parce que vous écrivez si rapidement à stdout.

Vous pouvez également utiliser la fonction d'impression

Python 2.6+

De Python 2.6, vous pouvez importer la fonction d'impression à partir de Python 3:

from __future__ import print_function 

Cela vous permet d'utiliser le Python 3 solution ci-dessous.

Python 3

En Python 3, l'instruction d'impression a été modifiée en fonction. En Python 3, vous pouvez faire à la place:

print('.', end='')