Using cProfile results with KCacheGrind
我正在使用cprofile分析我的python程序。基于这次谈话,我觉得kcachegrind可以解析和显示cprofile的输出。
但是,当我进入导入文件时,kcachegrind在状态栏中显示一个"未知文件格式"错误,并且坐在那里什么也不显示。
在我的分析数据与kcachegrind兼容之前,我是否需要做一些特殊的事情?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ... 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.62
使用cprofile,您还可以对现有程序进行概要分析,而无需编写任何单独的概要分析脚本。只需使用探查器运行程序
1 | python -m cProfile -o profile_data.pyprof script_to_profile.py |
用pyprof2calltree打开kcachegrind中的剖面数据,其-k开关自动打开kcachegrind中的数据。
1 | pyprof2calltree -i profile_data.pyprof -k |
例如,对整个贴纸服务器和webapp进行这样的分析
1 | python -m cProfile -o pyprof.out `which paster` serve development.ini |
pyprof2calltree可以通过易于安装来安装。
您可以使用
1 2 3 4 5 | from profilestats import profile @profile def func(): # do something here |
脚本可以像往常一样运行。
可以使用名为lscallprofttree的外部模块来完成。
这篇文章解释了:Cherrypy-CacheGrind
我得到的代码是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ... 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种不同的方法来分析代码和可视化结果:
I型剖面图1-从IPython配置myfunc()。
1 2 3 | import cProfile filename = 'filename.prof' cProfile.run('myfunc()', filename) |
2-将您的文件转换为外壳中可用的kcachegrind文件
1 2 | sudo pip install pyprof2calltree pyprof2calltree -i filename.prof -o callgrind.filename.prof |
3-在kcachegrind中打开callgrind.filename.prof
II-嵌入式CProfile1-概述代码中的几行。
1 2 3 4 5 6 7 | import cProfile filename = 'filename.prof' pr = cProfile.Profile() pr.enable() # ... lines to profile ... pr.disable() pr.dump_stats(filename) |
2-将您的文件转换为外壳中可用的kcachegrind文件
1 2 | sudo pip install pyprof2calltree pyprof2calltree -i filename.prof -o callgrind.filename.prof |
3-在kcachegrind中打开callgrind.filename.prof
雅皮布1-从IPython或代码中配置myfunc()。
1 2 3 4 5 6 7 | 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