엄범


근데 요즘은 PyCharm같은 IDE에서도 지원한다. 상단에 Run, Debug 아이콘 옆에 보면 프로파일링 다양하게 지원함.

python 기본 내장 라이브러리

benchmarking 목적 :  timeit
profiling 목적          :  cProfile

근데, 시스템 함수까지 다 출력되어 보기 불편하고 복잡하다.

``bash python -m cProfile -s cumulative file.py``


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

```python
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")
```
```
D:\Source\RAPTs
λ python test.py
mkList1 :  0.060883758620756026 s
mkList2 :  0.023483359671190612 s
```

line_profiler

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

프로파일링 대상 함수에 ``python @profile``을 붙인다.

```python

@profile

def predict(self, x):

for layer in self.layers.values():

x = layer.forward(x)

return x

```

```bash

$ kernprof [-v] -l script_to_profile.py

```

`` script_to_profile.py.lprof`` 파일이 생성된다. 이 파일에 프로파일링 결과가 저장되어 있다.

`` -v``옵션을 주면 생성 즉시 파일 내용을 확인할 수 있다.


`` .lprof`` 파일을 실행하려면

```bash

$ python -m line_profiler script_to_profile.py.lprof

```


etc profiler

  • memory_profiler
  • heapy
  • dowser