티스토리 뷰



[time]


foo 함수의 실행완료 시간을 다음과 같이 측정할 수 있다.


너무 간단한 연산에는 0에 가까울 것이다.


def foo():
print("foo")


import time
start = time.time()
foo()
print("delay=", time.time()-start)


[timeit]


time 으로 시간을 측정해도 되지만


좀더 정확한 시간을 측정하고자 개발됐다.


 timeit 모듈은 프로그램을 여러번 실행해 os 에 관련 없는 요인으로부터 영향을 덜 받아 정확한 측정이


가능하게 해 직접적인 컨트롤이 필요없다.

import timeit
import time


start = timeit.default_timer()
print("start")
time.sleep(2)
print("end")
end = timeit.default_timer()
print(end-start)




[decorator]


데코레이터를 통해서 시간측정을 좀더 편하게 할 수있다.


래퍼에서 함수 시작전과 끝난 후에 각각 시간측정하는 코드를 삽입하다.


import timeit
import time


def timer(func):
def wrapper(*args, **kwargs):
start = timeit.default_timer()
val = func(*args, **kwargs)
end = timeit.default_timer()
print(f"delay={end-start}")
return val
return wrapper


@timer
def foo(delay):
print("start")
time.sleep(delay)
print("end")


foo(2)



[context manager]


컨텍스트 매니저에는 시작할때 즉 with 키워드에서  enter 가 호출되고 종료할때 exit 가 호출된다.


이것을 이용해 타이머 클래스를 만들어 보자.


import timeit
import time


class Timer:
def __init__(self):
self.start = 0

def __enter__(self):
self.start = timeit.default_timer()
return self

def __exit__(self, exc_type, exc_val, exc_tb):
end = timeit.default_timer()
print(f"delay={end-self.start}")


with Timer() as t:
print("start")
time.sleep(2)
print("end")








댓글