파이썬 코드를 프로파일링하기
조회수 4545회
프로젝트 오일러(Euler)나 다른 여러 코딩 컨테스트에서는 프로그램 작동 시간에 제한을 두거나, 서로 자신의 코드가 얼마나 빨리 동작하는지를 경쟁하곤 합니다. 그런데 파이썬에서는 __main__
에 시간을 측정하는 코드를 측정한다든가의 접근 방식이 다소 불편하더라고요.
파이썬 프로그램의 작동시간을 프로파일링하기에 가장 좋은 방법을 추천해주세요.
1 답변
-
파이썬은 cProfile이라는 프로파일러를 내장하고 있습니다. 이 프로파일러는 전체 실행시간 뿐만 아니라 각각의 함수가 작동되는데에 걸리는 시간까지 측정해주고, 각각의 함수가 몇번이나 호출되었는지의 정보를 제공하여 어떤 부분을 최적화할 필요가 있을지 결정하는데에 도움을 줍니다.
이 프로파일러는 코드 내, 혹은 인터프리터에서 호출될 수 있습니다 :
import cProfile cProfile.run('foo()')
아니면 더 간단하게 스크립트를 실행할 때 cProfile을 호출하는 방법도 있죠 :
python -m cProfile myscript.py
여기서 좀더 쉽게 접근하기 위해, 저는 'profile.bat'이라는 작은 배치파일을 만들어서 사용하는데 :
python -m cProfile %1
이렇게 하면 단순히 아래와 같이 실행하여 같은 작업을 수행할 수 있습니다.
profile euler048.py
결과는 이런식으로 나옵니다 :
1007 function calls in 0.061 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.061 0.061 <string>:1(<module>) 1000 0.051 0.000 0.051 0.000 euler048.py:2(<lambda>) 1 0.005 0.005 0.061 0.061 euler048.py:2(<module>) 1 0.000 0.000 0.061 0.061 {execfile} 1 0.002 0.002 0.053 0.053 {map} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler objects} 1 0.000 0.000 0.000 0.000 {range} 1 0.003 0.003 0.003 0.003 {sum}
추가로 PyCon 2013에 올라온 좋은 영상자료를 공유합니다 : http://lanyrd.com/2013/pycon/scdywg/
댓글 입력