Með því að nota timeit einingu Python staðlaða bókasafnsins geturðu auðveldlega mælt framkvæmdartíma ferlis í kóðanum þínum. Þetta er gagnlegt fyrir fljótlega athugun.
Hér verður fjallað um eftirfarandi tvö mál.
- Mældu í Python skrá:
timeit.timeit()
,timeit.repeat()
- Mæling með Jupyter Notebook:
%timeit
,%%timeit
Önnur leið er að nota time.time() til að mæla liðinn tíma í forritinu.
Mælingar í Python skrám: timeit.timeit(), timeit.repeat()
Sem dæmi munum við mæla vinnslutíma einfaldrar falls, prófs(n), sem reiknar summan af n tölum í röð.
import timeit
def test(n):
return sum(range(n))
n = 10000
loop = 1000
result = timeit.timeit('test(n)', globals=globals(), number=loop)
print(result / loop)
# 0.0002666301020071842
Ef þú sendir kóðann sem þú vilt mæla sem streng í timeit.timeit() fallið verður hann keyrður FJÖLDI sinnum og tíminn sem það tók verður skilað.
Sjálfgefið gildi fyrir tölu er 1.000.000. Athugaðu að ef þú notar sjálfgefið gildi fyrir tímafrekt ferli mun það taka mikinn tíma.
Með því að senda globals() sem argument globals, verður kóðinn keyrður í alþjóðlega nafnrýminu.
Án þessa eru fallprófið og breytan n ekki þekkt í dæminu hér að ofan.
Kóðinn sem á að tilgreina getur verið kallanlegur hlutur í stað strengs, þannig að hægt er að tilgreina hann sem lambda tjáningu án mótefna; í þessu tilviki þarf ekki að tilgreina rökin globals.
result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287
Eining niðurstöðunnar er sekúndur. Hér er úttakið vinnslutími á hverja framkvæmd deilt með fjölda framkvæmda.
Ef þú deilir ekki verður niðurstöðugildið einfaldlega stærra eftir því sem þú fjölgar aftökum.
print(timeit.timeit(lambda: test(n), number=1))
print(timeit.timeit(lambda: test(n), number=10))
print(timeit.timeit(lambda: test(n), number=100))
# 0.0003999490290880203
# 0.0038685189792886376
# 0.03517670702422038
Með því að nota timeit.repeat() aðgerðina er hægt að keyra timeit() ítrekað. Niðurstaðan verður fengin sem listi.
repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]
Mæling með Jupyter Notebook:%timeit, %%timeit
Í Jupyter Notebook (IPython) geturðu notað eftirfarandi töfraskipanir; það er engin þörf á að flytja inn timeit eininguna.
%timeit
%%timeit
%tími
Í %timeit, tilgreindu markkóðann aðskilinn með bili eins og skipanalínurökum.
Sjálfgefið er að talan og endurtekningin í timeit.timeit() eru ákvörðuð sjálfkrafa. Þú getur líka tilgreint þá með -n og -r valkostunum.
Niðurstöðurnar eru reiknaðar sem meðaltal og staðalfrávik.
%timeit test(n)
# 259 µs ± 4.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -r 3 -n 10000 test(n)
# 237 µs ± 6.44 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
%%tími
Töfraskipunina %%timeit er hægt að nota til að mæla vinnslutíma heilrar frumu.
Sem dæmi skulum við keyra sama ferli með NumPy. Hægt er að sleppa -n og -r valkostunum.
Þar sem við mælum vinnslutíma allrar frumunnar, inniheldur eftirfarandi dæmi tíma til að flytja inn NumPy.
%%timeit -r 3 -n 10000
import numpy as np
a = np.arange(n)
np.sum(a)
# 19.7 µs ± 9.57 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
Það er engin þörf á að tilgreina markkóðann sem rök fyrir %%timeit. Allt sem þú þarft að gera er að skrifa %%timeit í upphafi reits, svo það er auðveldast í notkun.