2012-11-08 13 views
11

Mam skrypt w języku Python, który przetwarza duży plik tekstowy (z liniami około 4 mln) i zapisuje dane w dwóch oddzielnych plikach.Efekt wydajności używania instrukcji drukowania w skrypcie Python

Dodałem instrukcję print, która wyprowadza ciąg znaków dla każdej linii do debugowania. Chcę wiedzieć, jak źle może to być z punktu widzenia wydajności?

Jeśli będzie bardzo źle, mogę usunąć linię debugowania.

Edit

Okazuje się, że posiadanie instrukcji print dla każdego wiersza w pliku o 4 mln linii jest zwiększenie czasu zbyt wiele.

+4

Wypróbuj i przekonaj się sam? – NPE

+3

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

+0

Będzie wolniej, ponieważ trzeba wykonać dużą liczbę odbitek, każde dodatkowe przetwarzanie będzie skutkować pewną karą wykonania. –

Odpowiedz

16

Próbowałem to robić w bardzo prosty skrypt po prostu dla zabawy, różnica jest dość zdumiewające:

W large.py:

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

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

rozrządu to:

[[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 

Teraz działa to samo z "print" skomentował:

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

A kiedy skomentujesz zapis, zostaw w druku i uruchom z '> target.txt'? – Tim

+0

@Tim: Dziwne, że działało szybciej, ale może być moja maszyna jest mniej zajęta, niż kiedy wcześniej ją uruchomiłem, nie mam teraz czasu, aby uruchomić ją wiele razy, aby użyć bardziej solidnej statystycznej metody. [GP @ imdev1/tmp] $ czas pyton large.py> target.txt prawdziwe \t 0m1.954s użytkownik \t 0m1.897s sys \t 0m0.049s – GSP

+4

przekierowujące stdout do pliku będzie znacznie szybsze, w rzeczywistości może przekierować do pliku i otworzyć plik w edytorze w czasie krótszym niż potrzeba, aby wyrzucić dużą ilość danych na ekran. – agentp

Powiązane problemy