Post

(python) 성능 측정, 프로파일링(profiling)

PyCharm같은 IDE에서도 지원하기 때문에, 굳이 직접 돌리지 않아도 된다. 상단에 Run, Debug 아이콘 옆에 보면 프로파일링 다양하게 지원함.

python 기본 내장 라이브러리

benchmarking 목적 :timeit profiling 목적 :cProfile 근데, 시스템 함수까지 다 출력되어 보기 불편하고 복잡하다. python -m cProfile -s cumulative file.py

진짜 간단하게 함수의 수행 시간을 측정하고 싶을 때 : timeit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from timeit import timeit
def mkList1():
result = []
for value in range(1000):
result.append(value)
return result

def mkList2():
result = [value for value in range(1000)]
return result

print("mkList1 : ", timeit(mkList1, number=1000), "s")
print("mkList2 : ", timeit(mkList2, number=1000), "s")

1
2
3
4
5
6
D:\Source\RAPTs
λ python test.py
mkList1 :  0.060883758620756026 s
mkList2 :  0.023483359671190612 s

line_profiler

line 단위로 프로파일링 하려면 line_profiler를 사용하거나, 다른 서드파티 라이브러리를 사용해야한다. line_profiler와 flame graph가 대중적인 듯. 프로파일링 대상 함수에 @profile을 붙인다.

1
2
3
4
5
6
7
8
9
10
11
@profile
def predict(self, x):

for layer in self.layers.values():

x = layer.forward(x)



return x

1
2
$ kernprof [-v] -l script\_to\_profile.py

script\_to\_profile.py.lprof 파일이 생성된다. 이 파일에 프로파일링 결과가 저장되어 있다. -v옵션을 주면 생성 즉시 파일 내용을 확인할 수 있다.

.lprof 파일을 실행하려면

1
2
$ python -m line\_profiler script\_to\_profile.py.lprof

etc profiler
  • memory_profiler
  • heapy
  • dowser
This post is licensed under CC BY 4.0 by the author.