2012-06-04 10 views

Odpowiedz

8

Zastosowanie timeit:

Moduł ten zapewnia prosty sposób do czasu małe fragmenty kodu Pythona. Ma zarówno linię poleceń, jak i interfejsy wymienialne. Pozwala to uniknąć wielu typowych pułapek do mierzenia czasów wykonania.

Będziesz potrzebować instrukcji Pythona w ciągu; jeśli masz główną funkcję w kodzie, można go używać tak:

>>> from timeit import Timer 
>>> timer = Timer('main()', 'from yourmodule import main') 
>>> print timer.timeit() 

Drugi ciąg zapewnia konfigurację, środowisko dla pierwszej deklaracji być planowane w drugiej części nie jest tymczasowym. i jest przeznaczony do ustawiania scenografii. Pierwszy ciąg jest następnie uruchamiany przez jego kroki; domyślnie milion razy, aby uzyskać dokładny czas.

Jeśli potrzebujesz więcej szczegółów o tym, gdzie rzeczy są powolne, użyj jednego z python profilers:

profilera to program, który opisuje działanie czasu przebiegu programu, dostarczając różnorodne statystyki.

Najprostszym sposobem uruchomienia jest za pomocą modułu cProfile z wiersza poleceń:

$ python -m cProfile yourprogram.py 
+1

Spojrzałem na link i okazało się, że jest trochę mylące. Czy istnieje łatwy skrypt, który pokazuje, jak tego użyć? – MyNameIsKhan

+1

'timeit' jest dla mikro-benchmarków: małe fragmenty programów, nie całe programy. – delnan

+0

Jeśli wszystko, co chcesz wiedzieć, czy jest szybkie czy wolne, 'timeit' jest w porządku. Jeśli chcesz wiedzieć * gdzie * jest wolniejszy w większym programie, musisz profilować. –

2

Dla fragmentów użyć modułu timeit.

Dla całych programów należy użyć modułu cProfile.

2

Zastosowanie timeit

>>> import timeit 
>>> t = timeit.Timer(stmt="lst = ['c'] * 100") 
>>> print t.timeit() 
1.10580182076 
>>> t = timeit.Timer(stmt="lst = ['c' for x in xrange(100)]") 
>>> print t.timeit() 
7.66900897026 
5

może chcesz używać wbudowanej profiler.

Również może chcesz mierzyć czas pracy funkcja, używając następującego prostego dekoratora:

import time 
def myprof(func): 
    def wrapping_fun(*args): 
     start = time.clock() 
     result = func(*args) 
     end = time.clock() 
     print 'Run time of %s is %4.2fs' % (func.__name__, (end - start)) 
     return result 
    return wrapping_fun 

Zastosowanie:

@myprof 
def myfun(): 
    # function body 
+0

To bardzo słaba funkcja profilowania. Nie polegałbym na tym na niczym wartym benchmarkingu/profilowania w pierwszej kolejności. – delnan

+0

@delnan Czy możesz wyjaśnić, dlaczego? – MyNameIsKhan

+1

Wiele powodów, z których większość ogranicza się do "nikt z nas nie jest wystarczająco inteligentny, aby zrobić to dobrze z ręki". Na początek, 'time.clock' nie jest najdokładniejszym zegarem na wszystkich platformach (por.' Default_clock() 'zdefiniowanym przez' timetit'), a wynik jest bardzo ograniczony (wymieszany z wyjściem programu, musi zostać zebrany i przeanalizowany przez dłoń). Drobne problemy nie uwzględniają wyjątków i nie używają 'functools.wrap'. – delnan

5

Jeśli jesteś na Linux/Unix/POSIX-combatible platformie wystarczy użyć time. W ten sposób nie będziesz ingerował w Twój skrypt i nie spowolni go z niepotrzebnie szczegółowym (dla ciebie) profilowaniem. Naturalnie możesz go używać do prawie wszystkiego, nie tylko do skryptów Pythona.

Powiązane problemy