如何分析组合的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个样本,你知道你可以解决这个问题以获得健康的加速。 然后你可以重复它来解决下一个问题。 测量不是重点。 抓住你可以改进的东西就是重点。

这种组合非常难,但你可以使用一些标准的分析器,比如valgrindgprof甚至oprofile (尽管我从来没有设法从中得到有意义的输出)。