Python의 집계 코드 타이밍

파이썬에서 함수가 얼마나 많은 시간을 소요하는지 알아내는 방법은 여러 가지가 있습니다. 다음은 함수에 소요되는 시간을 확인하는 데코레이터를 쉽게 구현한 것입니다.

from functools import wraps
import time


def timeit(func):
    @wraps(func)
    def timeit_wrapper(*args, **kwargs):
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        total_time = end_time - start_time
        print(f'Function {func.__name__}{args} {kwargs} took {total_time:.4f} seconds')
        return result
    return timeit_wrapper

@timeit
def my_func():
    # do stuff



이 데코레이터는 소요 시간을 가져오는 함수를 데코레이션하여 사용할 수 있습니다.
이 함수가 호출된 횟수와 최대 소요 시간과 같은 시간 프레임에서 이 타이밍 데이터를 집계하려면 codetiming이라는 라이브러리를 사용해야 합니다.
다음은 샘플 사용 사례입니다.

# pip install codetiming
# pip install humanfriendly
from codetiming import Timer
from humanfriendly import format_timespan
from loguru import logger


@Timer(name="my_func", text=lambda secs: f"my_func elapsed time: {format_timespan(secs)}")
def my_func():
    ...

def get_aggregated_timings(cls):
    timed_function = "my_func"
    logger.info(
        f"\n{timed_function} count: {Timer.timers.count(timed_function)}\n"
        f"total: {Timer.timers.total(timed_function)}\n"
        f"max: {Timer.timers.max(timed_function)}\n"
        f"min: {Timer.timers.min(timed_function)}\n"
        f"mean: {Timer.timers.mean(timed_function)}\n"
        f"standard deviation: {Timer.timers.stdev(timed_function)}\n"
        f"median: {Timer.timers.median(timed_function)}\n"
    )
    Timer.timers.clear()  # clears all the timer data



이렇게 하면 my_func에서 보낸 총 시간을 찾을 수 있습니다. 그들 각각이 기록할 내용을 살펴보겠습니다.

  • count: 함수가 호출된 횟수.

  • 합계: 함수에서 경과된 모든 초의 합계

  • 최대: 단일 흐름에 소요된 최대 시간

  • min: 단일 흐름에 소요된 최소 시간

  • 평균: 해당 기능에 소요된 모든 시간의 평균

  • 중앙값: 모든 경과 시간의 중앙값

  • stdev: 모든 경과 시간의 표준 편차

  • 마지막에Timer.timers.clear() 메모리에 저장된 데이터를 지우고 다음 반복을 위해 새로 시작합니다.

    시간 제한이 있는 메모리 내 LRU 캐시를 사용하려면 다음 문서를 확인하십시오.

    Cache functions with timeout

    내 Twitter 핸들에 Python 프로그래밍에 대해 게시합니다. 팔로우할 수 있습니다.

    원래 게시 위치: my blog

    좋은 웹페이지 즐겨찾기