Python стандарт номын сангийн timeit модулийг ашигласнаар та өөрийн кодын процессын гүйцэтгэлийн хугацааг хялбархан хэмжиж болно. Энэ нь хурдан шалгахад тустай.
Дараах хоёр хэргийг энд хэлэлцэх болно.
- Python файл дахь хэмжилт:
timeit.timeit()
,timeit.repeat()
- Jupyter Notebook ашиглан хэмжилт хийх:
%timeit
,%%timeit
Өөр нэг арга бол программ дахь өнгөрсөн хугацааг хэмжихийн тулд time.time() ашиглах явдал юм.
Python файл дахь хэмжилтүүд: timeit.timeit(), timeit.repeat()
Жишээ болгон бид дараалсан n тооны нийлбэрийг тооцдог test(n) гэсэн энгийн функцийн боловсруулалтын хугацааг хэмжих болно.
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
Хэрэв та хэмжихийг хүссэн кодоо timeit.timeit() функцэд стринг болгон дамжуулбал NUMBER удаа хэрэгжиж, зарцуулсан хугацааг буцаана.
Тооны өгөгдмөл утга нь 1,000,000 байна. Хэрэв та өгөгдмөл утгыг цаг хугацаа шаардсан процесст ашиглавал маш их цаг хугацаа шаардагдах болно гэдгийг анхаарна уу.
Globals()-г дэлхийн аргумент болгон дамжуулснаар кодыг глобал нэрийн зайд гүйцэтгэнэ.
Үүнгүйгээр функцын тест болон n хувьсагчийг дээрх жишээнд хүлээн зөвшөөрөхгүй.
Заасан код нь мөрийн оронд дуудаж болох объект байж болох тул үүнийг аргументгүйгээр lambda илэрхийлэл болгон зааж өгч болно; энэ тохиолдолд глобал аргументыг зааж өгөх шаардлагагүй.
result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287
Үр дүнгийн нэгж нь секунд юм. Энд гаралт нь нэг гүйцэтгэлийн боловсруулалтын хугацааг гүйцэтгэлийн тоонд хуваана.
Хэрэв та хуваахгүй бол гүйцэтгэлийн тоог нэмэгдүүлэхийн хэрээр үр дүнгийн утга илүү их болно.
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
timeit.repeat() функцийг ашигласнаар timeit()-г дахин дахин ажиллуулж болно. Үр дүнг жагсаалт хэлбэрээр авах болно.
repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]
Jupyter Notebook ашиглан хэмжилт хийх:%timeit, %%timeit
Jupyter Notebook (IPython) дээр та дараах шидэт командуудыг ашиглаж болно; timeit модулийг импортлох шаардлагагүй.
%timeit
%%timeit
% timeit
%timeit-д зорилтот кодыг тушаалын мөрийн аргументууд гэх мэт зайгаар тусгаарлана.
Анхдагч байдлаар timeit.timeit() доторх тоо болон давталтыг автоматаар тодорхойлно. Та мөн тэдгээрийг -n ба -r сонголтоор зааж өгч болно.
Үр дүнг дундаж ба стандарт хазайлтаар тооцно.
%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
%%timeit шидэт командыг бүхэл эсийн боловсруулалтын хугацааг хэмжихэд ашиглаж болно.
Жишээлбэл, NumPy ашиглан ижил процессыг ажиллуулъя. -n ба -r сонголтуудыг орхиж болно.
Бид бүхэл эсийн боловсруулалтын хугацааг хэмждэг тул дараах жишээнд 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)
%%timeit-ийн аргумент болгон зорилтот кодыг зааж өгөх шаардлагагүй. Таны хийх ёстой зүйл бол нүдний эхэнд %%timeit гэж бичих тул хэрэглэхэд хамгийн хялбар.