调试/分析python扩展[关闭]

Posted

技术标签:

【中文标题】调试/分析python扩展[关闭]【英文标题】:Debugging/profiling python extensions [closed] 【发布时间】:2012-07-17 19:01:27 【问题描述】:

我使用出色的 f2py 工具将我的大部分代码编写为 Python 的 Fortran 扩展。 然而,有时很难捕捉到内存泄漏,并分析程序(花费时间最多的地方)。

问题是: 是否有一些简单的方法可以为 Python 调试和/或配置文件扩展(尤其是 f2py 生成的)? 使用 valgrind 似乎很复杂(我使用 MacOsX,并且不想重新编译解释器)。 我现在唯一的选择是打印 - 调试 + 打印 - 配置文件,这很耗时。

【问题讨论】:

你试过python的profilecProfile模块吗?据我了解,它们会为您检测您的代码,并且应该为 python 中的所有内容提供合理准确的计时。 (如果foo 是一个fortran 子例程,您将无法获得有关foo 调用的信息)。 就内存泄漏而言,您应该只在 fortran 中编写简单的测试例程,调用您的 fortran 例程。这些可以在 valgrid 下毫无问题地运行。 @mgilson ,profile 和 cProfile 可以让我看到模块的实际运行时间。在 python 中使用 valgrind 似乎很复杂***.com/questions/3982036/… 我并不是说您应该将 valgrind 与 python 一起使用——仅与 fortran 代码一起使用。如果你有一个fortran 子程序foo,你可以编写一个简单的fortran 代码来使用foo。编译整个东西并在其上使用 valgrind。如果它没有泄漏,那么foo 也不会泄漏,您可以在 python 中安全地使用它。 @IvanOseledets:基本操作是运行“valgrind --tool=callgrind python myscript.py”(myscript.py 调用您的 f2py 模块)然后使用方便的 kcachegrind GUI 检查输出。确保您选择的脚本在正常执行下运行得相当快,因为​​在 valgrind 下运行至少慢 10 倍。 【参考方案1】:

如果其他人在 Linux 平台上遇到同样的问题(抱歉,不支持 OS/X,所以我知道这不是您的“答案”) - Allinea 工具可以分析和调试调用的 Fortran 扩展Python,并查看任何内存泄漏。

与 callgrind/kcachegrind 相比,分析器的运行速度要快得多(通常最多减速 5%),而且代码运行缓慢的原因也更深,因为它理解矢量化,并且实时运行意味着 I/O 分析是准确的。

有一个探索f2py extension debugging and profiling的博客介绍了它。

【讨论】:

以上是关于调试/分析python扩展[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Heroku 构建可扩展分析后端的最佳方法是啥? [关闭]

使用xdebug调试程序后程序很慢的原因

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

在 Python Django 中启用调试时,如何仅关闭 SqlAlchemy 数据库池的日志记录?

什么 ide 适合开发 PyQt 应用程序? [关闭]

python中的金融技术分析[关闭]