当前位置:  开发笔记 > 编程语言 > 正文

在KCacheGrind中使用cProfile结果

如何解决《在KCacheGrind中使用cProfile结果》经验,为你挑选了5个好方法。

我正在使用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安装.



1> Mikael Lepis..:

使用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安装.


在Mac上你可以使用`qcachegrind`代替.`pip install pyprof2calltree && brew install qcachegrind`,然后`pyprof2calltree -i profile_data.pyprof && qcachegrind profile_data.pyprof.log`.
旁注:在基于Debian的系统上,添加任何python easy_install模块作为包的最简洁方法是:`sudo apt-get install python-stdeb`然后`pypi-install pyprof2calltree`.

2> jfs..:

你可以使用profilestats.profiledecorator($ pip install profilestats) - pyprof2calltree模块的简单包装(重新命名lsprofcalltree.py):

from profilestats import profile

@profile
def func():
    # do something here

脚本可以照常运行.profilestats创建两个文件:cachegrind.out.profilestats并且相应地profilestats.prof采用KCachegrind兼容和cProfile格式.



3> Adam Luchjen..:

可以使用名为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)模块,我仍然非常有兴趣听到它.



4> Mike Dunlave..:

如果您真正想要做的是查看代码的哪些部分可以针对速度进行优化,并且可以在调试器中随机暂停,则此方法可行.这可能会令人惊讶,但您不需要很多叠加.



5> Axel Borja..:

在KCachegrind/Qcachegrind中分析代码和可视化结果的3种不同方法:

我 - CPROFILE

1 - 来自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 - 嵌入式CPROFILE

1 - 在代码中描述几行.

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 - YAPPI

1 - 从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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有