본문 바로가기

Computer Science/파이썬

파이썬에서 시간 측정하기

알고리즘의 성능 측정은 공간/시간복잡도로 이루어지고 시간 측정은 Notation Big O와 아래의 모듈과 같이 측정할 수 있다.

  • 많은 양의 입력이 들어오면 차이는 점진적 또는 지수적으로 커지게 된다.
  • 문제를 해결하는데 있어서 다양한 방법이 존재하지만, 가능하면 빠른 알고리즘을 사용하는 이유는 속도 때문이다.

 

  1. 데코레이터를 활용
    • 자주 사용해야할때 불러오기 편하다. 
    • # 파이썬에서 시간을 측정하기 위한 함수생성
      import time
      
      from functools import wraps
      
      def check_time(function):
      	@wraps(function)
      	def measure(*args, **kwargs):
      		start_time = time.time()
      
      		result = function(*args, **kwargs)
      
      		end_time = time.time()
      
      		print(f"@check_time: {function.__name__} took {end_time - start_time}")
      		return result
      
      	return measure
      
      
      # case - 1
      @check_time # 데코레이터 생성하여 활용
      def sum_n(n):
          s = 0
          for i in range(1, n+1):
              s += i
          return s
      
      if __name__ == "__main__":
      	sum_n(100000)
      
      # case - 2
      @check_time # 데코레이터 생성하여 활용
      def sum_n2(n):
          return n*(n+1)//2
      
      if __name__ == "__main__":
      	sum_n2(100000)
          
      '''
      @check_time: sum_n took 0.009221315383911133
      @check_time: sum_n2 took 0.0
      '''
  2. timeit 모듈 활용
    • 짧은 코드의 실행시간을 확인해볼 수 있는 모듈이며 CLI로 실행하는 모듈이다.
    • $ python3 -m timeit '[x**2 for x in range(10000)]'
      100 loops, best of 5: 2.85 msec per loop
      
      $ python3 -m timeit 'list(map(lambda x: x**2, range(10000)))'
      100 loops, best of 5: 3.25 msec per loop
  3. time 명령어 사용
    • 제일 자주 쓰는 방법으로, 커맨드 라인에서 단순히 time 명령어를 앞에 붙이는 방식.
    • real, user, sys등 세가지의 정보를 얻을 수 있다.
      • real :  경과한 총 시간
      • user:  커널이 아닌 코드가 소비한 시간
      • sys: 커널 함수 때문에 소비한 시간.
    • $ time python n531_prtc.py
      
      real    0m0.436s
      user    0m0.015s
      sys     0m0.015s

ref. https://jeongukjae.github.io/posts/python%EC%97%90%EC%84%9C-%EC%8B%9C%EA%B0%84%EC%B8%A1%EC%A0%95%ED%95%98%EA%B8%B0/

 

Python에서 시간측정하기

요즈음 파이썬의 내부 구조를 자세히 이해해야할 필요성을 느껴서 시간 측정을 자주 하고 있는데, 그 방법에 대해서 몇가지 정리해보았다. (고성능 파이썬이라는 책을 참고하면서 작성했다)

jeongukjae.github.io

2021.10.10 - [파이썬] - [Computer Science] Iterative Sorting(반복 정렬) - Selection Sort(선택정렬), Insertion Sort(삽입정렬),Bubble Sort(버블정렬), Quick Sort(퀵 정렬),Count Sort (계수 정렬) / 시간 측정 비교