2012-11-08 9 views
11

Ho uno script Python che elabora un enorme file di testo (con circa 4 millioni di righe) e scrive i dati in due file separati.Effetto delle prestazioni dell'utilizzo delle istruzioni di stampa in script Python

Ho aggiunto una dichiarazione di stampa, che restituisce una stringa per ogni riga per il debug. Voglio sapere quanto male potrebbe essere dal punto di vista delle prestazioni?

Se sta andando molto male, posso rimuovere la linea di debug.

Modifica

Si scopre che avere un comunicato stampa per ogni riga in un file con 4 milioni di linee è in aumento il tempo troppo.

+4

Provalo e vedi di persona? – NPE

+3

'timeit' http://docs.python.org/2/library/timeit.html – wim

+0

Sarà più lento in quanto è necessario eseguire un numero elevato di stampe, qualsiasi elaborazione aggiuntiva comporterà alcune penalizzazioni delle prestazioni. –

risposta

16

provato a farlo in modo molto semplice script solo per divertimento, la differenza è abbastanza sconcertante:

In large.py:

target = open('target.txt', 'w') 

for item in xrange(4000000): 
    target.write(str(item)+'\n') 
    print item 

Timing è:

[[email protected] /tmp]$ time python large.py 
real 1m51.690s 
user 0m10.531s 
sys  0m6.129s 

[email protected] /tmp]$ ls -lah target.txt 
-rw-rw-r--. 1 gp gp 30M Nov 8 16:06 target.txt 

Ora in esecuzione lo stesso con "print" commentato:

[email protected] /tmp]$ time python large.py 
real 0m2.584s 
user 0m2.536s 
sys  0m0.040s 
+2

E quando commentate la scrittura, lasciate la stampa ed eseguite con '> target.txt'? – Tim

+0

@Tim: Stranamente ha funzionato più velocemente, ma potrebbe essere la mia macchina meno impegnativa di quando l'ho eseguita in precedenza, non ho il tempo ora di eseguirla più volte per utilizzare un approccio statistico più efficace. [Gp @ imdev1/tmp] $ tempo python large.py> target.txt reali \t 0m1.954s utente \t 0m1.897s sys \t 0m0.049s – GSP

+4

riorientare stdout a un file sarà molto più veloce, in realtà si può dirigere verso un file e aprire il file in un editor in meno tempo di quanto necessario per sputare una grande quantità di io sullo schermo. – agentp

Problemi correlati