반응형
질문
Project Euler와 같은 코딩 대회에서는 종종 최대 실행 시간이나 특정 솔루션이 얼마나 빠르게 실행되는지 자랑합니다. Python에서는 때로 접근 방법이 다소 어색 할 수 있습니다. 예를 들어, 타이밍 코드를 __main__
에 추가하는 것입니다.
Python 프로그램이 실행되는 데 걸리는 시간을 프로파일링하는 좋은 방법은 무엇인가요?
답변
파이썬에는 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에서 좋은 비디오 자료로 업데이트된 링크를 업데이트하였습니다.
Python Profiling
유튜브에서도 볼 수 있습니다.
반응형
댓글