프로그램을 구현하다 보면 특정 기능이 어느정도 시간을 소요하는지 확인이 필요한 경우가 있다.
이럴때 보통 아래와 같이 시간 측정을 위한 code 앞뒤에서 time 라이브러리를 이용하여 시간을 계산했다.
import time
start_time = time.time()
# 실행시간을 측정 할 code
# ~~~~~~~~~~~~~~~~~~~~~
print("Processing time : %.2f ms" % ((time.time() - start_time)*1000))
하지만 이런 방법은 한두군데 확인 하거나 잠깐 확인 할 때는 괜찮지만
작성하는 부분이 많아질수록 가독성도 떨어지고 관리가 불편하다는 단점이 있다.
그래서 사용 가능한 기능이 파이썬의 데코레이터 라는 기능!
함수 이전에 선언이 필요하고 선언 후에는 실행 할 함수 앞에 @ 키워드와 함께 호출해주면
해당 함수를 wrapping 해줘서 decorator에 정의된 기능을 함께 수행 하게 된다.
import time
# decorator는 다른 함수보다 앞서 선언되어야 한다!
def processing_time(func):
def wrapper_fn(*args, **kwargs):
start_time = time.time()
func_result = func(*args, **kwargs)
print("Processing time : %.2f ms" % ((time.time()-start_time)*1000))
return func_result
return wrapper_fn
@ precessing_time
def function_01():
# 실행시간을 측정하고 싶은 함수 선언
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
print("function_01")
def function_02():
# decorator 사용 안할 함수는 일반적으로 그대로 사용하면 된다.
print("function_02")
if __name__ == "__main__":
function_01()
function_02()
이러한 기능을 이용하여 나는 deeplearning model의 inference time을 측정하는 함수를 만들어 사용 중이다.
import time
# decorator는 다른 함수보다 앞서 선언되어야 한다!
def processing_time(func):
def wrapper_fn(*args, **kwargs):
start_time = time.time()
func_result = func(*args, **kwargs)
print("Processing time : %.2f ms" % ((time.time()-start_time)*1000))
return func_result
return wrapper_fn
@ processing_time
def get_forward(model, data):
return model(data)
if __name__ == "__main__":
# model & data 선언
get_forward(model, data)
'Programming > Python' 카테고리의 다른 글
Anaconda 가상환경 구동 및 프로그램실행을 batch로 만들자 (1) | 2020.05.12 |
---|---|
python에서의 Asterisk는 무슨일을 하는가. (0) | 2020.03.09 |
python-virtualenv를 이용해 가상환경을 설정하자 (0) | 2020.01.02 |
설정 값 저장을 위해 ConfigParser를 이용 해 보자. (0) | 2019.12.02 |
상태 진행률을 시각적으로 표현하자 (tqdm) (0) | 2019.11.13 |