(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.