파이썬 코드를 프로파일링하기


프로젝트 오일러(Euler)나 다른 여러 코딩 컨테스트에서는 프로그램 작동 시간에 제한을 두거나, 서로 자신의 코드가 얼마나 빨리 동작하는지를 경쟁하곤 합니다. 그런데 파이썬에서는 __main__에 시간을 측정하는 코드를 측정한다든가의 접근 방식이 다소 불편하더라고요.

파이썬 프로그램의 작동시간을 프로파일링하기에 가장 좋은 방법을 추천해주세요.


조회수 196


1 답변


좋아요
0
싫어요
채택취소하기

파이썬은 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/

  • 2016년 06월 14일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close