본문 바로가기
프로그램

[파이썬] 함수 실행시간 측정 하기

by 오디세이99 2022. 8. 12.
728x90
반응형

코드를 만들다 보면 실행시간을 측정할 일이 있게 됩니다.

 

time package의 시작시간과 완료시간을 기록한 후 (실행기간 = 완료시간 - 시작시간) 으로 계산합니다.

#########################
# 함수의 실행시간 측정.
#########################

import time

def ftn1():           # 실행 시간을 측정하고자 하는 함수
    sum = 0
    for i in range(int(1e7)):
        sum += i
    return

# 시작 시간을 기록
start_r = time.perf_counter()    # sleep 함수를 호출하여 대기한  시간을 포함하여 측정
start_p = time.process_time()    # 실제로 연산하는데 걸린 시간만 측정

ftn1()    # 함수 실행

# 완료시간을 기록
end_r = time.perf_counter()
end_p = time.process_time()

# 실행시간 계산
time_r = end_r - start_r
time_p = end_p - start_p

print(f'function run time : {time_r:.3f}sec (real) / {time_p:.3f}sec(cpu)')

 

run time : 1.217sec (real) / 1.156sec(cpu)

perf_counter()로 측정한 시간이 일반적인 실행시간이 되겠군요.

 

 

파이썬의 Decorator를 사용해서 좀 더 사용하기 쉬운 코드입니다.

코드상에 직접 시작시간, 완료 시간 및 계산 코드를 입력하지 않아도 됩니다.

##############################################################
# 함수의 실행시간 측정. 함수내 측정코드를 삽입하지 않아도 됨
##############################################################

import time

# Decorator(@) 사용
def elapsed(f):
    def wrap(*args):
        start_r = time.perf_counter()    # sleep 함수를 호출하여 대기한  시간을 포함하여 측정
        start_p = time.process_time()    # 실제로 연산하는데 걸린 시간만 측정
        ret = f(*args)
        end_r = time.perf_counter()
        end_p = time.process_time()
        runtime_r = end_r - start_r
        runtime_p = end_p - start_p

        print(f'function({f.__name__}) run time : {runtime_r:.3f}sec (real) / {runtime_p:.3f}sec(cpu)')

        return ret
    return wrap

@elapsed
def ftn1():
    sum = 0
    for i in range(int(1e7)):
        sum += i
    return

ftn1()

 

function(ftn1) run time : 1.053sec (real) / 1.000sec(cpu)
728x90
반응형

댓글