如何配置组合python和c代码

时间:2010-10-29 10:51:26

标签: python c profiling

我有一个由多个python脚本组成的应用程序。其中一些脚本正在调用C代码。应用程序现在运行速度比现在慢得多,因此我想对其进行分析以查看问题所在。是否有工具,软件包或只是一种方式来分析这样的应用程序?一个工具,它将跟随python代码进入C代码并分析这些调用?

注1:我很清楚标准的Python分析工具。我特意在这里寻找组合的Python / C分析。

注2:Python模块使用ctypes调用C代码(有关详细信息,请参阅http://docs.python.org/library/ctypes.html)。

谢谢!

2 个答案:

答案 0 :(得分:3)

Stackshots工作。由于您已将Python和C结合使用,因此可以单独处理它们。对于Python,您可以按Ctrl-C,同时检查堆栈的速度很慢。这样做几次。这将暴露你可以在python代码中修复的任何东西。对于C代码,在GDB之类的调试器下运行整个事件并按Ctrl-C以在C中获取堆栈跟踪。其中一些将暴露您可以在C代码中修复的任何内容。我被告知OProfile也可以这样做。 (另一种方法是使用 lsstack ,如果可用的话。)

这是一个鲜为人知的方法,适用于这个原则:假设你有一个无限循环或几乎无限循环。你怎么会找到它?你会停止程序,看看它在做什么,对吧?假设程序只需要两倍的时间。每当你停止它时,你抓住它做出不必要的事情的几率是50%。所以你要做的就是多次停止它。一旦你看到它做了一些可以改进的事情,只需2个样本,你知道你可以解决这个问题,以获得健康的加速。然后你可以重复它来得到下一个问题。测量不是重点。抓住你可以改进的东西就是重点。

答案 1 :(得分:1)

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