Czy istnieje prosty sposób na wykonanie programu w języku Python?Jak ustawić czas uruchamiania programu w języku Python?
wyjaśnienie: Cały programy
Czy istnieje prosty sposób na wykonanie programu w języku Python?Jak ustawić czas uruchamiania programu w języku Python?
wyjaśnienie: Cały programy
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
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
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
To bardzo słaba funkcja profilowania. Nie polegałbym na tym na niczym wartym benchmarkingu/profilowania w pierwszej kolejności. – delnan
@delnan Czy możesz wyjaśnić, dlaczego? – MyNameIsKhan
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
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.
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
'timeit' jest dla mikro-benchmarków: małe fragmenty programów, nie całe programy. – delnan
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ć. –