KCacheGrind에서 cProfile 결과 사용
cProfile을 사용하여 Python 프로그램을 프로파일 링하고 있습니다. 이 강연을 바탕으로 KCacheGrind가 cProfile의 출력을 구문 분석하고 표시 할 수 있다는 인상을 받았습니다.
그러나 파일을 가져올 때 KCacheGrind는 상태 표시 줄에 '알 수없는 파일 형식'오류 만 표시하고 아무것도 표시하지 않습니다.
내 프로파일 링 통계가 KCacheGrind와 호환되기 전에 특별히해야 할 일이 있습니까?
...
if profile:
import cProfile
profileFileName = 'Profiles/pythonray_' + time.strftime('%Y%m%d_%H%M%S') + '.profile'
profile = cProfile.Profile()
profile.run('pilImage = camera.render(scene, samplePattern)')
profile.dump_stats(profileFileName)
profile.print_stats()
else:
pilImage = camera.render(scene, samplePattern)
...
패키지 버전
- KCacheGrind 4.3.1
- 파이썬 2.6.2
cProfile을 사용하면 별도의 프로파일 링 스크립트를 만들지 않고도 기존 프로그램을 프로파일 링 할 수 있습니다. 프로파일 러로 프로그램 실행
python -m cProfile -o profile_data.pyprof script_to_profile.py
pyprof2calltree를 사용하여 kcachegrind에서 프로필 데이터를 엽니 다. -k 스위치는 kcachegrind에서 데이터를 자동으로 엽니 다.
pyprof2calltree -i profile_data.pyprof -k
예를 들어 전체 paster 서버 및 webapp 프로파일 링은 다음과 같이 수행됩니다.
python -m cProfile -o pyprof.out `which paster` serve development.ini
pyprof2calltree는 easy_install로 설치할 수 있습니다.
profilestats.profile
데코레이터 ( $ pip install profilestats
) -pyprof2calltree 모듈에 대한 간단한 래퍼 ( )를 사용할 수 있습니다 lsprofcalltree.py
.
from profilestats import profile
@profile
def func():
# do something here
스크립트는 평소처럼 실행할 수 있습니다. profilestats
: 두 개의 파일 생성 cachegrind.out.profilestats
및 profilestats.prof
KCachegrind 호환과 cprofile 명령 형식 대응을.
lscallproftree 라는 외부 모듈을 사용하여 수행 할 수 있습니다.
이 문서에서는 방법을 설명합니다. CherryPy-CacheGrind
결과 코드는 다음과 같습니다.
...
if profile:
import cProfile
import lsprofcalltree
profileFileName = 'Profiles/pythonray_' + time.strftime('%Y%m%d_%H%M%S') + '.profile'
profile = cProfile.Profile()
profile.run('pilImage = camera.render(scene, samplePattern)')
kProfile = lsprofcalltree.KCacheGrind(profile)
kFile = open (profileFileName, 'w+')
kProfile.output(kFile)
kFile.close()
profile.print_stats()
else:
pilImage = camera.render(scene, samplePattern)
...
외부 (즉, Python과 함께 제공되지 않음) 모듈이 필요없는이 작업을 수행하는 방법을 아는 사람이 있다면 여전히 그것에 대해 듣고 싶습니다.
If what you're actually trying to do is see what parts of your code could be optimized for speed, and you can randomly pause it in the debugger, this method works. It may be surprising, but you don't need very many stackshots.
3 differents ways to profile your code and visualizing results in KCachegrind/Qcachegrind:
I - CPROFILE
1 - Profile myfunc() from ipython
import cProfile
filename = 'filename.prof'
cProfile.run('myfunc()', filename)
2 - Convert your file to a usable kcachegrind file in your shell
sudo pip install pyprof2calltree
pyprof2calltree -i filename.prof -o callgrind.filename.prof
3 - Open callgrind.filename.prof in kcachegrind
II - EMBEDDED CPROFILE
1 - Profile few lines in your code.
import cProfile
filename = 'filename.prof'
pr = cProfile.Profile()
pr.enable()
# ... lines to profile ...
pr.disable()
pr.dump_stats(filename)
2 - Convert your file to a usable kcachegrind file in your shell
sudo pip install pyprof2calltree
pyprof2calltree -i filename.prof -o callgrind.filename.prof
3 - Open callgrind.filename.prof in kcachegrind
III - YAPPI
1 - Profile myfunc() from ipython or from your code
import yappi
filename = 'callgrind.filename.prof'
yappi.set_clock_type('cpu')
yappi.start(builtins=True)
myfunc()
stats = yappi.get_func_stats()
stats.save(filename, type='callgrind')
2 - Open callgrind.filename.prof in kcachegrind
ReferenceURL : https://stackoverflow.com/questions/1896032/using-cprofile-results-with-kcachegrind
'programing' 카테고리의 다른 글
Android Emulator로 인증해야하는 프록시 (0) | 2021.01.17 |
---|---|
알파 블렌딩 양을 지정하여 RGB 색상을 계산하는 방법은 무엇입니까? (0) | 2021.01.17 |
장고 템플릿과 지역 트릭 (0) | 2021.01.17 |
프로젝트 별 (또는 파일별로) Xcode에서 들여 쓰기 설정을 지정할 수 있습니까? (0) | 2021.01.17 |
임의의 가비지 바이트를 파일에 쓰는 명령이 있습니까? (0) | 2021.01.17 |