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

조회수 4547회

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

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

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/

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)