python - 如何分析组合的 python 和 c 代码

标签 python c profiling

我有一个包含多个 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 个样本,你就知道你可以修复它以获得健康的加速。然后你可以重复它来得到下一个问题。测量不是重点。关键是捕获可以改进的地方。

关于python - 如何分析组合的 python 和 c 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051117/

相关文章:

c++ - 对 __isoc99_sscanf 的 undefined reference

c# - 在不访问 SQL Server Profiler 的情况下分析 ADO.NET 语句

python - 如何在 Django 中连接两个表并在我的模板中使用结果?

python - Pandas - 基于列对行进行分组,并用非空值替换 NaN

c++ - 使用 C 从事件目录访问用户信息

python - 为什么这个 C 方法会出现段错误?

java - 分析 JNI 应用程序

assembly - 探查器如何对正在运行的程序进行采样?

Python 命名空间和 import : setting the value of a global variable in an imported module creates a second, 无关全局?

python - 使用python检索文档中包含2个或更多字母的单词总数