我正在使用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
Python 2.6.2
Mikael Lepis.. 90
使用cProfile,您还可以分析现有程序,而无需创建任何单独的分析脚本.只需使用分析器运行程序
python -m cProfile -o profile_data.pyprof script_to_profile.py
使用pyprof2calltree在kcachegrind中打开配置文件数据,其-k开关自动在kcachegrind中打开数据
pyprof2calltree -i profile_data.pyprof -k
例如,整个贴纸服务器和webapp的分析将像这样完成
python -m cProfile -o pyprof.out `which paster` serve development.ini
pyprof2calltree可以使用easy_install安装.
使用cProfile,您还可以分析现有程序,而无需创建任何单独的分析脚本.只需使用分析器运行程序
python -m cProfile -o profile_data.pyprof script_to_profile.py
使用pyprof2calltree在kcachegrind中打开配置文件数据,其-k开关自动在kcachegrind中打开数据
pyprof2calltree -i profile_data.pyprof -k
例如,整个贴纸服务器和webapp的分析将像这样完成
python -m cProfile -o pyprof.out `which paster` serve development.ini
pyprof2calltree可以使用easy_install安装.
你可以使用profilestats.profile
decorator($ 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)模块,我仍然非常有兴趣听到它.
如果您真正想要做的是查看代码的哪些部分可以针对速度进行优化,并且可以在调试器中随机暂停,则此方法可行.这可能会令人惊讶,但您不需要很多叠加.
在KCachegrind/Qcachegrind中分析代码和可视化结果的3种不同方法:
我 - CPROFILE1 - 来自ipython的配置文件myfunc()
import cProfile filename = 'filename.prof' cProfile.run('myfunc()', filename)
2 - 将您的文件转换为shell中可用的kcachegrind文件
sudo pip install pyprof2calltree pyprof2calltree -i filename.prof -o callgrind.filename.prof
3 - 在kcachegrind中打开callgrind.filename.prof
II - 嵌入式CPROFILE1 - 在代码中描述几行.
import cProfile filename = 'filename.prof' pr = cProfile.Profile() pr.enable() # ... lines to profile ... pr.disable() pr.dump_stats(filename)
2 - 将您的文件转换为shell中可用的kcachegrind文件
sudo pip install pyprof2calltree pyprof2calltree -i filename.prof -o callgrind.filename.prof
3 - 在kcachegrind中打开callgrind.filename.prof
III - YAPPI1 - 从ipython或您的代码中剖析myfunc()
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 - 在kcachegrind中打开callgrind.filename.prof