Python의 timeit 모듈로 처리 시간을 측정합니다.

사업

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() 함수에 문자열로 전달하면 NUMBER번 실행되고 소요된 시간이 반환됩니다.
숫자의 기본값은 1,000,000입니다. 시간이 많이 걸리는 프로세스에 기본값을 사용하면 많은 시간이 소요됩니다.

globals()를 인수 globals로 전달하면 코드가 전역 네임스페이스에서 실행됩니다.
이것이 없으면 위의 예에서 함수 테스트와 변수 n이 인식되지 않습니다.

지정할 코드는 문자열 대신 호출 가능한 개체일 수 있으므로 인수가 없는 람다 식으로 지정할 수 있습니다. 이 경우 global 인수를 지정할 필요가 없습니다.

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()의 횟수와 반복은 자동으로 결정됩니다. -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은 전체 셀의 처리 시간을 측정하는 데 사용할 수 있습니다.

예를 들어 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를 쓰기만 하면 되므로 가장 사용하기 쉽습니다.