Python 스크립트를 프로파일링하려면 어떻게 해야 하나요?
프로젝트 오일러와 다른 코딩 대회에서는 종종 최대 실행 시간이 정해져 있거나 사람들이 자신의 특정 솔루션이 얼마나 빨리 실행되는지 자랑하기도 합니다. 파이썬에서는 __main__
에 타이밍 코드를 추가하는 등 다소 주먹구구식으로 접근하는 경우도 있습니다.
파이썬 프로그램이 실행되는 데 걸리는 시간을 프로파일링하는 좋은 방법은 무엇일까요?
1198
20
파이썬에는 cProfile이라는 프로파일러가 포함되어 있습니다. 이 프로파일러는 총 실행 시간뿐만 아니라 각 함수가 개별적으로 호출된 횟수를 알려주므로 어디를 최적화해야 하는지 쉽게 파악할 수 있습니다.
코드 내에서 또는 인터프리터에서 다음과 같이 호출할 수 있습니다:
더 유용하게는 스크립트를 실행할 때 cProfile을 호출할 수 있습니다:
이 작업을 더 쉽게 하기 위해 'profile.bat' 이라는 작은 배치 파일을 만들었습니다:
이제 실행하기만 하면 됩니다:
그리고 저는 이걸 얻었습니다:
편집: 파이콘 2013의 좋은 비디오 리소스에 대한 링크가 업데이트되었습니다. 파이썬 프로파일링 [유튜브를 통해서도](https://www.youtube.com/watch?v=QJwVYlDzAXs).
얼마 전 내가 내가 '피콜그래프' 에서 파이썬 코드를 생성할 심상. Edit: I& # 39, ve 업데이트되도록 사용할 수 있는 최신 릴리스에는 3.3tb, 예를 들면 말 쓰기 시작했다.
그래프비츠 '와' 설치 등을 설치 후 피콜그래프 명령줄이 에서 실행할 수 있습니다.
또는 특정 부분을 코드에 프로파일링할 수 있습니다.
아래 이미지는 '둘 중 하나를 피콜그래프리프니크 비슷한' 파일이 생성됩니다.
enter 이미지 여기에 설명을!
프로파일러를 사용하면 (기본적으로) 메인 스레드에서만 작동하며 다른 스레드에서 정보를 얻을 수 없다는 점을 지적할 가치가 있습니다. 이는 프로파일러 문서에 전혀 언급되어 있지 않기 때문에 약간 혼란스러울 수 있습니다.
스레드를 프로파일링하려면 문서에서
threading.setprofile()
함수를 살펴보세요.스레드 프로파일링을 위한
threading.Thread
서브클래스를 직접 생성할 수도 있습니다:를 생성하고 표준 클래스 대신 해당
ProfiledThread
클래스를 사용할 수 있습니다. 더 많은 유연성을 제공할 수 있지만, 특히 클래스를 사용하지 않는 타사 코드를 사용하는 경우 그만한 가치가 있는지 확실하지 않습니다.Wiki 는 파이썬 숭배자들로부터도 페이지 프로파일링의 경우 자료: http://wiki.python.org/moin/PythonSpeed/PerformanceTips # Profiling_Code
있는 그대로 파이썬 문서: http://docs.python.org/library/profile.html
손쉽게 사용할 수 있는 것은 큰 도구에서는 로울러 크리스씨가 에서 볼 수 있는 것처럼 크프로피레 인쇄하려면 화면:
또는 파일:
PS>. Unbuntu 사용하는 경우, 파이썬 프로파일할 설치해야 합니다
파일로 출력 경우 다음과 같은 도구를 사용하여 가상화 잘 볼 수 있습니다.
피콜그래프: 호출 그래프 이미지를 만들 수 있는 툴이 < br>; install:< br>;
실행하십시오:
보기:
, Png 파일을 사용할 수 있습니다, whatever you like I 함께사용할 gimp*&l br> 볼 수 있습니다. 저는 가끔 죄송합니다. 확보하십시오.
점: 너무 커서 카이로 렌더러입니다. 그래프화합니다 비트맵입니다. 맞게 0.257079 통해 확장을
내 이미지 우누사블리 수 있는 작은. 그래서 일반적으로 svg 파일을 만듭니다.
PS>. 그래프비츠 (joyon. 제공하는 프로그램) 를 설치해야 합니다.
그래프) 를 사용하여 다른 gprof2dot @maxy / @quodlibetor:
39 에 대한 의견 @maxy& [이 오토메이티드] (https://stackoverflow.com/a/7693928/25616) 는 자체 대답을 안 할 정도로 나를 데리고 것 같아요. 난 이미 크프로피레 생성할지 오프스테스 파일과 함께 사용되는 피콜그래프 셨으며 재실행할 싶지 않다, 그래서 내가 didn& # 39, [gprof2dot] (http://code.google.com/p/jrfonseca/wiki/Gprof2Dot) 및 attaboy 예쁜 svg:
및 연기하는거야!
출력은 joyon. 사용한다 (동일한 심아이엔큐 피콜그래프 /dev/raw/raw1 등과 비슷하다. 뭐 좀 더 적은 정보를 유실됩니다 인상을 gprof2dot 표시되어도:
! gprof2dot 출력은
이 때 나는 스나케비츠 에 실행했음 핸디 도구에서는 불렀으매 연구 주제. 스나케비츠 는 웹 기반 프로필링 시각화 도구. 설치 및 사용에 매우 쉽습니다. 내가 사용하는 방법을 사용하여 파일을 생성할 수 있는 것은 일반적인 통계 분석 '와' %prun 재동기화할 스나케비츠.
, 는 기본 비즈 사용되는 기술은 아래와 같이 햇살 차트입니다 있는 함수 호출 계층 레이어로 호 및 시간 정보를 각 폭 그들의 인코딩되지 배치되어 있습니다.
가장 좋은 것은 차트입니다 상호 작용할 수 있습니다. 예를 들어, 1 호 (arc), 호 및 하위 항목 클릭하면 확대 될 수 있는 새로운 햇살 표시하십시오 확대 등 자세한 내용.
! [입력하십시오. 이미지 여기에 설명을] [2]
'크프로피레' 내가 생각하는 반면, '나카시그리드' 프로파일링의 경우 가장 큰 배를 결과는 매우 유용합니다. 3 의 ['pyprof2calltree'] 그 사이에 는 파일 변환.
설치하는 데 필요한 도구 (켜짐이 unbuntu, 최소한):
결과:
! [스크린샷 결과] [4]
또한 GUI 는 규모의 거론하며 크프로피레 덤프하지 뷰어입니다 런스나이크런. 이 때문에 정렬하려면 있습니다 선택하고 확대 관련 부분을 프로그램였어 그림에서 사각형 시간에 크기에 비례한다. 마우스를 사각형에는 호출하는 경우 강조표시됩니다 테이블에서 모든 지도상에. 이 두 번 클릭하면 해당 부분을 사각형에는 확대합니다. 또 누가, 어떤 페이징됩니다 해당 부분을 보여줄 수 있는 부분이 있다.
상세 정보는 매우 도움이 된다. 그 때 유용하게 사용될 수 있는 비트 코드를 보여 줍니다 겪고 있는 내장현 라이브러리란 있다. 그 어떤 파일 및 코드 찾기 위해 어떤 선 알려줍니다.
39, & # 39 도 지점에 있는 스맥랜드의 OP profiling& 것 "이라고 말했다. # 39, & # 39, 그 말은 그가 timing& 보인다. 프로그램을 실행할 때 속도가 느린 프로파일링된 염두에 두어야 합니다.
enter 이미지 여기에 설명을!
브라우저에서 파이라고요 차트입니다 그립니다. 블렌드합니다 문제가 가장 큰 특징이다. 아주 간단합니다.
좋은 프로필링 module 은 line_profiler (일명 name. domain. 스크립트입니다 kernprof.py). Here 다운로드할 수 있습니다.
총 소요 시간 내 각 함수에 대한 정보를 얻을 수 있는 전용 크프로피레 알고 있다. 따라서 개별 코드 행 시간이 없습니다. 이 문제는 시간이 많이 걸릴 수 있기 때문에 과학 컴퓨팅용으로 하나의 선 경우가 많습니다. 또한, as I catch the time I was 지출의 너희에게베풀어진 크프로피레 didn& # 39 라고 누마피오도토스, t
프로피레
'line_profiler 한다' (이미 여기에 제시된) 도 ['프로피레'] (https://github.com/vpelletier/pprofile) 를 것으로 묘사되고 있다.
>. 결정론적 및 통계 순수 파이썬 알고 스레드할 선 세분성, >. 프로필러
또한, 파이썬, 순수한 '로 선 세분성 line_profiler' 로 사용될 수 있으며, 심지어 독립 명령이나 모듈에서는 칼그리드 형식 발령합니다 쉽게 분석할 수 있는 파일 '을 (를)' [k q] 카시그리드.
우프로프
또한 [우프로프] (https://github.com/nvdv/vprof) 는 파이썬 패키지 묘사된다.
>. [.] 파이썬 프로그램에 제공하는 각종 가상화 및 대화형 부유하도다 등의 특징을 실행 시간 및 메모리 사용.
! [히트 맵] [1]
난 최근에 만들어진 [참치] (https://github.com/nschloe/tuna) 를 파이썬 런타임용으로 개발하십시오 시각화 및 가져오기할 프로파일입니다. 여기 이 도움이 될 수 있습니다.
! [입력하십시오. 이미지 여기에 설명을] [1]
설치 "' 참치, pip3 설치 "' 런타임용으로 개발하십시오 프로파일할 만듭니다. "' 파이썬 프로그램지프로프 맥프로피레 - o - yourfile.py "' 호스트였든 가져오기의 프로파일 (파이썬 3.7+ 필수) "' 파이썬 - X 임포트프로피레 2>, yourfile.py 임포트드로그 "' 그럼 도망쳐야해 참치 파일에 대한 "' 참치 프로그램지프로프 "'
39 의 there& 멋지구리해요 답을 많이 있지만 일부 외부 프로그램을 사용할 명령줄이나 프로필링 및 / 또는 정렬 결과를 얻을 수 있습니다.
내가 정말 누락했습니다 닿지 않고 다른 방법으로 사용할 수 있는 내 IDE (eclipse 피데프) 이 명령줄이나 설치할 수 없다. 그래서 여기 있네요.
없이 명령행을 프로필링
참조 docs 또는 다른 대한 자세한 정보.
39 에 대한 답변을 조라네 Shaw& 다음과 같은 코드를 사용할 수 있는 '예상대로' 루 콜 멀티스레디드 아니라 내가 생각 하는 방법으로 크프로피레 셀프리에네이블 () 은 단지 ' ()', '와' 셀프리드사이블 프로파일링된 함수 호출 할 수 있도록 주변의 페이징됩니다 단순히 교도관님도요 있고 그 사이에 어떤 코드를 운영까지도 인터퍼런스 최소화하면서 기존 코드를.
Virtaal의 소스에는 프로파일링(특정 메서드/함수에 대해서도)을 매우 쉽게 할 수 있는 매우 유용한 클래스와 데코레이터가 있습니다. 그런 다음 출력은 KCacheGrind에서 매우 편안하게 볼 수 있습니다.
매우 빠른 시간 내에 크프로피레 프로필링 기울이나 전송되었기 기간말 가져다줄래요 함께 오류뿐만. 룬치스 방식으로 이 문제를 해결할 수 있는 기능을 제대로 초기화중 com/go/4e6b330a_kr, 환경, 그런 것이 유용할 수 있다.
My way 를 사용하는 것이 이아피 (https://code.google.com/p/yappi/). 특히 유용한 결합됨 it& # 39 에 등록할 수 있는 방법을 RPC 서버에 있는 (심지어 딱 디버깅하지) 및 인쇄 시작, 정지점을 프로필링 정보, 예를 들어 이런 식으로.
작업할 때 보라그들은 프로필러 시작 프로그램에 언제든지 스타르프로피러 호출하여 '수' RPC 호출을 통해 프린스프로피러 방법 및 로그 파일에 대한 정보를 덤프합니다 프로필링 '수' (또는 수정하십시오 rpc 방법을 반품해야 요청자에게) 와 같은 출력:
특히 수 있지만 그렇지 않을 수 있는 점을 고려할 때 매우 유용합니다 파선-짧은 스크립트에만 서버 유형 최적화합니다 프로세스활용 프린스프로피러 '' 메서드를 호출할 수 시간 경과에 따라 여러 번 프로파일이고 비교하십시오 다양한 프로그램 사용 시나리오를. (예:
누적 프로필러 만들려면, 그 의미는 실행하십시오 여러 차례 연속 함수 및 제스쳐놀이처럼 합한 결과를 얻을 수 있습니다.
데코레이터 cumulative_profiler '이' 사용할 수 있습니다.
39 의 파이썬 > it& 3.6tb 수 있지만, 이를 위한 구체적인 '=' 제거하시겠습니까 비지역 작동합니까 이전 버전에 대한.
'함수' 배즈 프로필링
'이' 5 배, 배즈 실행했음 인쇄했습니다.
횟수만큼 지정
(Https://stackoverflow.com/a/582337/1070617) 를 추가하고,
내가 이 모듈에서는 작성했습니까 쉽게 볼 수 있는 크프로피레 및 출력입니다 사용할 수 있습니다. 더 있습니다. https://github.com/ymichael/cprofilev
참조: http://ymichael.com/2014/03/08/profiling-python-with-cprofile.html 수집됩니다 쉽게 이해할 수 있는 방법에 대한 통계.
Python 은 프로필링 처리할 수 있는 새로운 도구를 피프먼이터: http://www.pyvmmonitor.com/
이 같은 고유한 기능을 보유하고 있다
참고: # 39 의 상업적 있지만, it& 위한 무료 오픈 소스.