如何分析组合python和c代码
我有一个由多个python脚本组成的应用程序。 其中一些脚本正在调用C代码。 该应用程序现在运行速度比以前慢得多,所以我想对其进行配置以查看问题所在。 是否有工具,软件包或只是一种方法来分析这样的应用程序? 一个将Python代码放入C代码并分析这些调用的工具?
注1:我非常了解标准的Python分析工具。 我特意在这里寻找组合的Python / C分析。
注2:Python模块使用ctypes调用C代码(有关详细信息,请参阅http://docs.python.org/library/ctypes.html)。
谢谢!
Stackshots工作。 既然你已经结合了Python和C,你可以分别处理它们。 对于Python,您可以在Ctrl-C慢速检查堆栈的时候点击。 多次这样做。 这将暴露你可以在Python代码中修复的任何东西。 对于C代码,在像GDB这样的调试器下运行整个事情,然后按下Ctrl-C来获取C中的堆栈跟踪。其中几个将公开您可以在C代码中修复的任何内容。 我被告知OProfile也可以做到这一点。 (另一种方法是在可用的情况下使用lsstack 。)
这是一个鲜为人知的方法,它遵循这个原则:假设你有一个无限循环或几乎无限循环。 你会如何找到它? 你会停止该程序,看看它在做什么,对吧? 假设程序只需要两倍的时间。 每次你停下来的时候,你抓住它做不必要的事情的机会是50%。 所以你所要做的就是多次停止它。 只要你看到它做了一些可以改进的东西,只需要2个样本,你就知道你可以解决这个问题,以获得健康的加速。 然后你可以重复它来获得下一个问题。 测量不是重点。 抓住你可以改进的东西就是关键。
这个组合很难,但是你可以使用一些标准的分析器,比如valgrind
, gprof
甚至是oprofile
(尽管我从来没有设法得到有意义的输出)。