나는 cProfile을 사용하여 내 코드를 프로파일 링했으며 훌륭하게 작동하고 있습니다. 또한 결과를 시각화하기 위해 gprof2dot.py 를 사용합니다 (조금 더 명확 해짐 ).
그러나 cProfile (및 지금까지 본 대부분의 다른 Python 프로파일 러)은 함수 호출 수준에서만 프로파일 링하는 것 같습니다. 이로 인해 특정 함수가 다른 위치에서 호출 될 때 혼란이 발생합니다. 호출 # 1 또는 호출 # 2가 대부분의 시간을 차지하는지 알 수 없습니다. 문제의 함수가 다른 7 곳에서 호출 된 6 단계 깊이 일 때 이것은 더욱 악화됩니다.
라인 별 프로파일 링은 어떻게 얻습니까?
대신 :
function #12, total time: 2.0s
다음과 같은 것을보고 싶습니다.
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
cProfile은 부모에게 "전송"되는 총 시간을 보여 주지만 여러 계층과 상호 연결된 호출이있을 때 다시이 연결이 끊어집니다.
이상적으로는 데이터를 구문 분석 한 다음 각 줄에 주어진 총 시간과 함께 내 소스 파일을 표시하는 GUI를 갖고 싶습니다. 이 같은:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
그런 다음 두 번째 "func (c)"호출을 클릭하여 "func (a)"호출과 별도로 해당 호출에서 시간을 차지하는 것을 확인할 수 있습니다.
말이 돼? 이러한 유형의 정보를 수집하는 프로파일 링 라이브러리가 있습니까? 내가 놓친 멋진 도구가 있습니까?
pstats.print_callers
. 여기 에 예가 있습니다 .