2010-04-29 8 views
3

나는 어디서나이를 온라인으로 찾을 수 없었다. 나는 프로파일 러를 사용하여 코드를 더 잘 최적화하는 방법을 찾고, 함수가 누적 적으로 가장 많은 시간을 소비 할 때 str(), print 및 기타 유사한 기능이 프로파일의 많은 부분을 차지한다. 파이썬 프로그램을 프로파일 링하여 사용자 정의 함수를 얻을 수있는 최선의 방법은 코드의 어느 부분을 최적화 할 수 있는지 알아 보는 것입니다.Python 프로파일 링 Windows에서 내장 함수를 무시하는 방법

나는이 주제에 관해 설명 할 수있는 모든 조명을 이해할 수 있으면 좋겠다.

답변

8

확인 하시길, 실제 목표는 최대한 빨리 코드를 작성하는 것입니다. 맞습니까?

함수를 사용하는 데 걸리는 시간을 알아내는 것으로 가정하는 것이 자연 스럽지만이를 보는 또 다른 방법이 있습니다.

프로그램이 실행되는 동안 호출 트리를 추적합니다.이 트리는 창 외부의 실제 트리와 비슷합니다. 트렁크는 main 함수와 같으며 분기가 다른 함수에서 호출되는 것과 같습니다.

각 "리프"에 일정한 시간이 걸리므로 가능한 한 많은 리프를 제거하기 위해 트리를 자르십시오 ().

한 가지 방법은 잎이 많은 가지를 찾아 잎을 잘라내는 것입니다. 또 다른 방법은 필요하지 않은 경우 전체 가지를 자르는 것입니다. 문제는 필요없는 무거운 가지를 찾는 것입니다.

하나의 뼈 - 간단한 방법은 여러 잎을 무작위로 선택하는 것입니다 (10 개씩). 각 잎은 줄기를 따라 트렁크까지 줄을 따라 추적하십시오. 모든 지점에는 리프에서 트렁크까지 몇 줄의 라인이 있습니다. 해당 분기점을 통과하는 선이 많을수록 해당 분기에 잎이 많을수록 더 많은 선을 그어 버릴 수 있습니다.

Here's how you can apply this to your program. 리프를 샘플링하려면 프로그램을 임의로 일시 중지하고 호출 스택을 살펴보십시오. 그것은 트렁크에 다시 줄입니다. 각 (기능, 호출 사이트가 아닌) 콜 사이트는 분기 지점입니다. 해당 콜 사이트가 40 %와 같이 샘플의 일부분에 있다면, 대략 얼마만큼 잘라낼 수 있습니까?

따라서 함수를 사용하는 데 걸리는 시간을 측정하는 것으로 생각하지 마십시오. 어떤 콜 사이트가 "무거운"것인지 물어 보는 것으로 생각하십시오. 그게 전부입니다.

+0

프로그램 동작을 조사하는 데 흥미로운 접근 방법입니다. 어쩌면 소설이 아니 겠지만, 실제로 집에서 "내 프로그램이 실제로 무엇을하고 있는가?"라는 질문을 던집니다. 감사! –

+0

@stw_dev : 네가 맞다. 어떤 이유로 든 새롭지 않고, 가르쳐주지 않는 길이다. –

+0

@Mike : gprof를 사용해야합니까? 나는 현재 Optimize하기를 원하는 코드를 위해 Windows Machine을 사용 중이다. 아니면 CProfile이 여전히 작동합니까? 그러나 내가 뇌 주위를 완전히 감싼 후에 큰 설명. 나는 파이썬을 사용하고 있음을 잊어 버렸습니다. (속도면에서 가장 위대한 언어는 아닙니다) –