Python стандартты кітапханасының timeit модулін пайдалану арқылы кодыңыздағы процестің орындалу уақытын оңай өлшей аласыз. Бұл жылдам тексеру үшін пайдалы.
Мұнда келесі екі жағдай талқыланады.
- Python файлында өлшеу:
timeit.timeit()
,timeit.repeat()
- Jupyter ноутбукімен өлшеу:
%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() функциясына жол ретінде жіберсеңіз, ол САН рет орындалады және оған кеткен уақыт қайтарылады.
Санның әдепкі мәні – 1 000 000. Уақытты қажет ететін процесс үшін әдепкі мәнді пайдалансаңыз, оған көп уақыт кететінін ескеріңіз.
Globals() аргументін глобалдар ретінде беру арқылы код жаһандық аттар кеңістігінде орындалады.
Онсыз функция сынағы және n айнымалысы жоғарыдағы мысалда танылмайды.
Көрсетілетін код жолдың орнына шақырылатын нысан болуы мүмкін, сондықтан оны аргументсіз лямбда өрнегі ретінде көрсетуге болады; бұл жағдайда жаһандық аргументті көрсету қажет емес.
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 ноутбукімен өлшеу:%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 жазу керек, сондықтан оны пайдалану ең оңай.