Joonas' Note

Joonas' Note

[Python] 함수의 실행 속도 측정하기 본문

개발/python

[Python] 함수의 실행 속도 측정하기

2023. 1. 27. 02:30 joonas

    함수의 실행 속도를 측정하는 코드이다. 다음과 같이 함수들을 미리 선언해둔다.

    import time
    
    def measure(func):
        """
        Returns milliseconds how much time takes to run given func
        """
        start = time.time()
        func()
        end = time.time()
        diff = end - start
        return diff * 1000
    
    def bench(func, k: int = 1, params: list = [{}], title: str = ''):
        pcnt = len(params)
        pstr = f" x {pcnt} params" if pcnt > 1 else ''
        print(f"[run x {k}{pstr}] {title}")
        t = []
        for _ in range(k):
            for param in params:
                elapsed = measure(lambda: func(**param))
                t.append(elapsed)
        average = sum(t) / len(t)
        del t
        print(f'>>> (avg.) {average:.5f} ms')

    이제 함수를 실행하고 시간을 측정하는 방법은 아래와 같다.

    # 측정하려는 함수
    def fun1():
        arr = []
        for _ in range(100000):
            arr.append(_)
        del arr
    
    # 측정 시작
    bench(
        func=fun1,  # 측정하려는 함수
        k=1000,     # 1000번 실행해서 평균으로 계산
        title='list.append() for 100k times' # 출력할 제목
    )
    
    """
    실행 결과:
    [run x 1000] list.append() for 100k times
    >>> (avg.) 6.47000 ms
    """

    함수에 파라미터를 넘기고 싶다면 다음과 같다.

    def func2(n: int):
        for _ in range(2 ** n):
                pass
    
    # 실행
    bench(
        func=func2,
        k=100,
        params=[{'n': 1}, {'n': 10}, {'n': 16}, {'n': 20}],
        title='passing parameters'
    )
    
    """
    실행 결과:
    [run x 100 x 4 params] passing parameters
    >>> (avg.) 4.09005 ms
    """
    Comments