FacerAin
PostsGithub
Python에서 프로파일링 하는 법
Tip / Development
2024.03.24.

들어가며,

이번 시간에는 파이썬에서 프로파일링을 수행하는 방법에 대해서 간단하게 알아봅니다.

“최적화하기 전에 프로파일링을 하라.” - Effective Python 2nd 중

SW 개발에서 기능 개발만큼이나 중요한 것은 최적화와 유지보수입니다. 이때 현재 시스템의 연산 및 메모리 사용량 등을 확인하고 분석할 필요가 있는데, 이 과정을 프로파일링이라고 합니다.

파이썬에서 프로파일링 수행하기

파이썬에서는 기본 라이브러리로 profilecProfile을 지원합니다. 두 라이브러리의 자세한 차이점은 링크를 참고해보세요!

아래 코드는 피보나치를 구하는 두 가지 버전과 cProfile을 이용하여 프로파일링하는 코드 예제입니다.

from cProfile import Profile
from pstats import Stats


def fibonacci_dp(n):
    dp = [0, 1]
    for i in range(2, n + 1):
        dp.append(dp[i - 1] + dp[i - 2])
    return dp[n]


def fibonacci_recursion(n):
    if n <= 1:
        return n
    else:
        return fibonacci_recursion(n - 1) + fibonacci_recursion(n - 2)


def test():
    num = 35
    fibonacci_dp(num)
    fibonacci_recursion(num)


profiler = Profile()
profiler.runcall(test)

stats = Stats(profiler)
stats.strip_dirs()
stats.sort_stats("cumulative")
stats.print_stats()

프로파일링한 결과는 아래와 같습니다. 결과를 살펴보면 함수 호출 횟수와 소요 시간들을 확인할 수 있습니다. 이를 통해 간단하게 dp버전과 재귀 버전의 로직의 소요 시간을 비교해볼 수 있습니다.

2
프로파일링 결과

마치며

지금까지 간단하게 cProfile을 이용하여 파이썬 프로파일링하는 방법을 알아보았습니다. 이를 통해 프로파일링을 수행하고, 최적화를 통해 시스템을 개선할 수 있습니다. 이외에도 메모리를 프로파일링 하기 위한 tracemalloc, memory_profiler 개별 함수를 라인 별로 프로파일링 할 수 있는 line_profile 등이 있으니, 한번 살펴보시는 것도 추천드립니다! 감사합니다


© 2021 Designed By Yongwoo Song, Powered By Gatsby.