分析python C扩展

2024-05-15 06:20:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个python C扩展,它从python接收数据并计算一些cpu密集型计算。 可以对C-分机进行侧写吗?

这里的问题是,用C编写一个要分析的样本测试会很有挑战性,因为代码依赖于特定的输入和数据结构(由python控制代码生成)。

你有什么建议吗?


Tags: 代码数据结构cpu代码生成建议分机样本接收数据
3条回答

使用gprof,您可以分析properly compiled和链接的任何程序(gcc -pg等,在gprof的情况下)。如果您使用的Python版本不是用gcc构建的(例如,PSF发布的Windows预编译版本),那么您需要研究该平台和工具链有哪些等效的工具(在Windows PSF的情况下,也许mingw可以提供帮助)。那里可能有“不相关”的数据(Python运行时中的内部C函数),如果有,由gprof显示的百分比可能不适用——但是绝对数(调用的次数和持续时间)仍然有效,您可以发布进程gprof的输出(例如,使用一个小Python脚本;-)排除不相关的数据并计算所需的百分比。

我用google-perftools找到了方法。诀窍是在python中包装StartProfiler和StopProfiler函数(在我的例子中是通过cython)。

要分析C扩展,只需将python代码包装在StartProfiler和StopProfiler调用中。

from google_perftools_wrapped import StartProfiler, StopProfiler
import c_extension # extension to profile c_extension.so

StartProfiler("output.prof")
... calling the interesting functions from the C extension module ...
StopProfiler()

然后,要分析示例,可以以callgrind格式导出,并在kcachegrind中查看结果:

pprof --callgrind c_extension.so output.prof > output.callgrind 
kcachegrind output.callgrind

在pygabriel的评论之后,我决定将一个包上传到pypi,该包使用谷歌perftools的cpu分析器实现python扩展的分析器:http://pypi.python.org/pypi/yep

相关问题 更多 >

    热门问题