Thoughts, stories and ideas.

파이썬 코드 실행시간 측정

Python에서 코드 실행 속도를 측정하는 가장 간단하고 일반적인 방법은 time 모듈을 사용하는 것입니다. 다음은 time 모듈을 사용하여 코드 실행 시간을 측정하는 방법입니다.

방법 1: time 모듈 사용

import time

start_time = time.time()  # 시작 시간 기록

# 측정하고 싶은 코드
# 예: some_function()

end_time = time.time()  # 종료 시간 기록
elapsed_time = end_time - start_time  # 경과 시간 계산

print(f"Execution time: {elapsed_time} seconds")

방법 2: timeit 모듈 사용

작은 코드 조각의 실행 시간을 반복적으로 측정하고 평균을 내고 싶다면 timeit 모듈이 유용합니다. timeit은 여러 번 실행하여 평균 실행 시간을 측정합니다.
코드의 실행 시간을 측정하는 가장 간편한 방법으로 매직 명령어 %time과 %timeit을 사용할 수 있습니다.

import timeit

code_to_test = """
# 측정하고 싶은 코드
# 예: some_function()
"""

# timeit.timeit(stmt, setup, number)
# stmt: 실행할 코드, setup: 초기 설정 코드, number: 반복 횟수
execution_time = timeit.timeit(code_to_test, number=100)  # 코드를 100번 실행

print(f"Average execution time: {execution_time / 100} seconds")

방법 3: datetime 모듈 사용

datetime 모듈을 사용하여 좀 더 세밀한 시간 측정이 가능합니다.

from datetime import datetime

start_time = datetime.now()

# 측정하고 싶은 코드
# 예: some_function()

end_time = datetime.now()
elapsed_time = end_time - start_time

print(f"Execution time: {elapsed_time}")

이러한 측정 방법들은 코드의 실행 시간을 대략적으로 측정하는 데 사용됩니다.
시스템의 부하나 다른 요인에 따라 실행 시간이 다를 수 있습니다.
성능 최적화를 위한 더 복잡한 분석이 필요한 경우, cProfile, line_profiler 등의 프로파일링 도구를 사용하는 것이 좋습니다.


다음으로 Jupyter Notebook에서 코드의 실행 시간을 측정하는 가장 간편한 방법은
매직 명령어 %time과 %timeit 입니다.

한 줄의 코드에 대해 측정:

%time some_function()

셀 전체에 대해 측정:

%%time
# 측정하고 싶은 코드
some_function()

%timeit 매직 명령어: 코드를 여러 번 실행하여 평균 실행 시간을 측정합니다. 더 정확한 측정을 위해 사용됩니다.

cProfile은 Python의 표준 프로파일링 도구로, 프로그램의 다양한 부분이 얼마나 시간을 소비하는지 상세하게 분석할 수 있습니다.
사용 예시:

import cProfile

cProfile.run('some_function()')

line_profiler 사용:

line_profiler는 각 줄별로 실행 시간을 측정하여 보다 세밀한 분석을 제공합니다.
먼저 line_profiler를 설치해야 합니다:

pip install line_profiler

Jupyter Notebook에서 사용하기 위해서는 %lprun 매직 명령어를 사용합니다. 먼저, 프로파일링할 함수에 @profile 데코레이터를 추가해야 합니다.
사용 예시:

%load_ext line_profiler

%lprun -f some_function some_function()

%time과 %timeit은 간단하게 실행 시간을 측정하기에 유용하지만, 프로그램의 어느 부분이 병목이 되는지는 파악하기 어렵습니다.
cProfile과 line_profiler는 더 상세한 분석을 제공하지만, 사용법이 더 복잡하고 추가적인 설정이 필요할 수 있습니다.