Python 코드 프로파일링
프로파일링은 스크립트를 실행해야 하는 시간과 실행 빈도에 대한 통계를 표시하는 기술입니다. 이를 통해 코드의 어느 부분을 최적화하고 프로그램을 효율적으로 만들어야 하는지 이해할 수 있습니다.
cProfile
을 사용하여 Python 코드 프로파일링
cProfile
은 프로그램의 실행 시간을 측정하고 메서드가 얼마나 자주 호출되는지 보여주는 Python의 내장 모듈입니다. Python 코드를 프로파일링하기 위해 run()
메소드 호출에서 코드 또는 메소드 이름을 문자열 인수로 작성합니다.
프로그램의 총 실행 시간과 함께 특정 메서드가 실행되는 데 걸리는 시간도 표시됩니다.
다음 코드에서 run()
메서드 호출에서 문자열로 간단한 비교 작업을 작성했습니다. 출력은 해당 코드의 모든 통계를 보여줍니다.
예제 코드:
import cProfile
cProfile.run("0 < 1")
출력:
3 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
이제 백엔드에서 많은 메소드 호출로 상당한 시간이 소요되는 코드를 작성해 보겠습니다. 다음 코드에서는 목록에 숫자를 추가하는 중첩 루프가 포함된 메서드를 만들었습니다.
이 메서드를 프로파일링하기 위해 이름을 run()
메서드에 전달합니다. 출력은 이 코드에 대한 모든 통계를 보여줍니다.
예제 코드:
import cProfile
def func():
num = []
for i in range(1, 100):
for j in range(1, 100):
num.append(j)
cProfile.run("func()")
출력:
9805 function calls in 0.009 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.006 0.006 0.009 0.009 <ipython-input-3-d9419f0448d8>:2(func)
1 0.000 0.000 0.009 0.009 <string>:1(<module>)
1 0.000 0.000 0.009 0.009 {built-in method builtins.exec}
9801 0.003 0.000 0.003 0.000 {method 'append' of 'list' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
SnakeViz
를 사용하여 Python에서 프로필 결과 시각화
‘SnakeViz’는 프로파일링 시각화를 위한 웹 기반 도구입니다. 우리는 쉽게 설치하고 사용할 수 있습니다.
pip install snakeviz
다음 코드의 결과를 프로파일링하고 시각화한다고 가정합니다. Python 환경의 py
파일에 코드를 저장해야 합니다.
우리는 각각 1000번 실행하고 일부 산술 연산을 수행하는 루프를 포함하는 세 가지 함수를 가지고 있습니다.
예제 코드:
def func():
a = 1
b = 2
for i in range(1, 1000):
a += b
def func2():
a = 1
b = 2
for i in range(1, 1000):
a -= b
def func3():
a = 1
b = 2
for i in range(1, 1000):
a *= b
func()
func2()
func3()
다음 명령을 사용하여 결과를 프로파일링하고 시각화합니다.
python -m cProfile -o temp.dat My_Script.py
snakeviz temp.dat
출력:
Icicle
(기본값) 및 Sunburst
는 SnakeViz에서 제공하는 두 가지 시각화 모드입니다. Icicle의 경우 직사각형의 너비는 함수에 소요된 시간을 나타냅니다.
호의 각도 범위는 Sunburst로 전환하는 경우 실행 시간을 나타냅니다. 스타일
옵션을 사용하여 두 가지 스타일을 변경할 수 있습니다.
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn