Măsurați timpul de procesare cu ajutorul modulului timeit din Python.

Afaceri

Folosind modulul timeit din biblioteca standard Python, puteți măsura cu ușurință timpul de execuție al unui proces în codul dumneavoastră. Acest lucru este util pentru o verificare rapidă.

Următoarele două cazuri vor fi discutate aici.

  • Măsură într-un fișier Python:timeit.timeit(),timeit.repeat()
  • Măsurarea cu Jupyter Notebook:%timeit,%%timeit

O altă modalitate este de a utiliza time.time() pentru a măsura timpul scurs în program.

Măsurători în fișiere Python: timeit.timeit(), timeit.repeat()

Ca exemplu, vom măsura timpul de procesare a unei funcții simple, test(n), care calculează suma a n numere consecutive.

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

Dacă treceți codul pe care doriți să îl măsurați sub forma unui șir de caractere în funcția timeit.timeit(), acesta va fi executat de un NUMĂR de ori și va fi returnat timpul necesar.
Valoarea implicită pentru număr este 1 000 000 000. Rețineți că, dacă utilizați valoarea implicită pentru un proces care necesită mult timp, acesta va dura foarte mult timp.

Dacă se trece globals() ca argument globals, codul va fi executat în spațiul de nume global.
Fără acest lucru, funcția test și variabila n nu sunt recunoscute în exemplul de mai sus.

Codul care urmează să fie specificat poate fi un obiect apelabil în loc de un șir de caractere, astfel încât poate fi specificat ca o expresie lambda fără argumente; în acest caz, nu este necesar să se specifice argumentul globals.

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

Unitatea de măsură a rezultatului este reprezentată de secunde. Aici, rezultatul este timpul de procesare pe execuție împărțit la numărul de execuții.

Dacă nu împărțiți, valoarea rezultatului va deveni pur și simplu mai mare pe măsură ce crește numărul de execuții.

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

Utilizând funcția timeit.repeat(), timeit() poate fi executat în mod repetat. Rezultatul va fi obținut sub forma unei liste.

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

Măsurarea cu Jupyter Notebook:%timeit, %%timeit

În Jupyter Notebook (IPython), puteți utiliza următoarele comenzi magice; nu este nevoie să importați modulul timeit.

  • %timeit
  • %%timeit

%timeit

În %timeit, specificați codul țintă separat de un spațiu, ca în cazul argumentelor din linia de comandă.

În mod implicit, numărul și repetiția din timeit.timeit() sunt determinate automat. De asemenea, le puteți specifica cu opțiunile -n și -r.

Rezultatele sunt calculate ca medie și abatere standard.

%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

Comanda magică %%timeit poate fi utilizată pentru a măsura timpul de procesare al unei întregi celule.

Ca un exemplu, să rulăm același proces folosind NumPy. Opțiunile -n și -r pot fi omise.

Deoarece măsurăm timpul de procesare al întregii celule, exemplul următor include timpul de import 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)

Nu este necesar să se specifice codul țintă ca argument pentru %%timeit. Tot ce trebuie să faceți este să scrieți %%timeit la începutul unei celule, astfel încât este cel mai ușor de utilizat.

Copied title and URL