python 함수 실행 시간 측정 (decorator 이용)

2023. 7. 13. 01:25python

python으로 개발을 하다보면 해당 함수의 실행 시간을 측정하고 싶을 때가 있다.

이때 대부분의 사람들이 하는 방법은 아래와 같이 time 모듈을 사용한다.

 

import time

def sum_n1(n):
    sum_= 0
    start = time.time()
    for i in range(n):
        sum_ += i
    end = time.time()
    print(f"sum_n1 : {end-start} sec")
    return sum_

def sum_n2(n):
    sum_= 0
    start = time.time()
    for i in range(n):
        sum_ += i
    end = time.time()
    print(f"sum_n2 : {end-start} sec")
    return sum_
    
sum_n1(10000)
sum_n2(10000)

# output
# sum_n1 : 0.0006511211395263672 sec
# sum_n2 : 0.0006499290466308594 sec

 

 

 

하나의 함수의 실행 시간을 측정할 때는 위와 같이 하면 되지만, 만약 여러 개의 함수의 실행 시간을 측정해야한다면, 여간 귀찮은게 아니다.

이때, python의 decorator를 사용하면, 함수의 이름을 출력할 수 있고, 동시에 불필요한 코드를 줄일 수 있다.

(Decorator 설명 : https://velog.io/@jaeha0725/Python-decorator-register)

 

 

 

import time

def elapsed(f):
    def wrap(*args):
        start = time.process_time()
        # 함수 실행
        ret = f(*args)
        end = time.process_time()
        elapsed = end - start
        print(f'{f.__name__} elapsed: {elapsed} sec')
        return ret
    return wrap

@elapsed    
def sum_n1(n):
    sum_= 0
    for i in range(n):
        sum_ += i
    return sum_

@elapsed    
def sum_n2(n):
    sum_= 0
    for i in range(n):
        sum_ += i
    return sum_
# 함수 실행
sum_n1(10000)
sum_n2(100000)

다음과 같이 쓰면, 함수 위에 위와 같이 Decorator를 사용하여 모든 함수의 실행 시간을 @elapsed 한줄로 실행이 가능해진다.

'python' 카테고리의 다른 글

헝가리안 알고리즘  (0) 2023.11.17
cv2 bbox 그리기  (0) 2023.11.16
python opencv 이미지 합치기  (1) 2023.11.01
Python import 위치 알기  (0) 2023.10.10
python 데이터 저장 읽기 / pickle / 리스트, 딕셔너리 저장  (0) 2023.08.10