Використовуючи модуль timeit стандартної бібліотеки Python, ви можете легко виміряти час виконання процесу у своєму коді. Це корисно для швидкої перевірки.
Тут будуть розглянуті два наступні випадки.
- Вимірювання у файлі Python:
timeit.timeit()
,timeit.repeat()
- Вимірювання за допомогою ноутбука Jupyter:
%timeit
,%%timeit
Іншим способом є використання time.time() для вимірювання часу, що минув у програмі.
Вимірювання у файлах Python: timeit.timeit(), timeit.repeat()
Як приклад, ми виміряємо час обробки простої функції test(n), яка обчислює суму 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() як аргумент 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 на початку комірки, тому це найпростіше використовувати.