Mõõtke töötlemisaega Pythoni mooduli timeit abil.

Äri

Pythoni standardraamatukogu mooduli timeit abil saate hõlpsasti mõõta oma koodis oleva protsessi täitmisaega. See on kasulik kiireks kontrollimiseks.

Siinkohal käsitletakse kahte järgmist juhtumit.

  • Pythoni faili mõõtmine:timeit.timeit(),timeit.repeat()
  • Mõõtmine Jupyter Notebookiga:%timeit,%%timeit

Teine võimalus on kasutada programmis kulunud aja mõõtmiseks time.time().

Mõõtmised Python failides: timeit.timeit(), timeit.repeat()

Näitena mõõdame lihtsa funktsiooni test(n) töötlemisaega, mis arvutab n järjestikuse arvu summa.

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

Kui edastate mõõdetava koodi stringina funktsioonile timeit.timeit(), käivitatakse see NUMBER kordi ja tagastatakse aeg, mis selleks kulus.
Numbri vaikeväärtus on 1,000,000. Pange tähele, et kui kasutate vaikeväärtust aeganõudva protsessi jaoks, võtab see palju aega.

Edastades globals() argumendina globals, täidetakse kood globaalses nimeruumis.
Ilma selleta ei tunta ülaltoodud näites funktsiooni test ja muutujat n ära.

Määratletav kood võib olla stringi asemel kutsutav objekt, nii et seda saab määrata lambda-avaldisena ilma argumentideta; sel juhul ei ole vaja määrata argumenti globals.

result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287

Tulemuse ühikuks on sekundid. Siin on väljundiks töötlemisaeg ühe täitmise kohta jagatud täitmise arvuga.

Kui te ei jaga, muutub tulemuse väärtus lihtsalt suuremaks, kui te suurendate täitmiste arvu.

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

Kasutades funktsiooni timeit.repeat(), saab timeit() korduvalt käivitada. Tulemus saadakse loeteluna.

repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]

Mõõtmine Jupyter Notebookiga:%timeit, %%timeit

Jupyter Notebookis (IPython) saate kasutada järgmisi maagilisi käske; timeit-moodulit ei ole vaja importida.

  • %timeit
  • %%timeit

%timeit

Määrake %timeitis sihtkood, mis on eraldatud tühikuga nagu käsurea argumendid.

Vaikimisi määratakse number ja kordus timeit.timeit() funktsioonis automaatselt. Neid saab määrata ka valikutega -n ja -r.

Tulemused arvutatakse keskmise ja standardhälbena.

%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)

%%timeit

Maagilist käsku %%timeit saab kasutada terve lahtri töötlemisaja mõõtmiseks.

Näitena käivitame sama protsessi NumPy abil. Valikud -n ja -r võib ära jätta.

Kuna me mõõdame kogu raku töötlemisaega, siis sisaldab järgmine näide ka NumPy importimise aega.

%%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)

Sihtkoodi ei ole vaja määrata %%timeiti argumendina. Tuleb vaid kirjutada %%timeit lahtri algusesse, nii et seda on kõige lihtsam kasutada.