【发布时间】:2012-07-17 19:01:27
【问题描述】:
我使用出色的 f2py 工具将我的大部分代码编写为 Python 的 Fortran 扩展。 然而,有时很难捕捉到内存泄漏,并分析程序(花费时间最多的地方)。
问题是: 是否有一些简单的方法可以为 Python 调试和/或配置文件扩展(尤其是 f2py 生成的)? 使用 valgrind 似乎很复杂(我使用 MacOsX,并且不想重新编译解释器)。 我现在唯一的选择是打印 - 调试 + 打印 - 配置文件,这很耗时。
【问题讨论】:
-
你试过python的
profile或cProfile模块吗?据我了解,它们会为您检测您的代码,并且应该为 python 中的所有内容提供合理准确的计时。 (如果foo是一个fortran 子例程,您将无法获得有关foo调用的信息)。 -
就内存泄漏而言,您应该只在 fortran 中编写简单的测试例程,调用您的 fortran 例程。这些可以在 valgrid 下毫无问题地运行。
-
@mgilson ,profile 和 cProfile 可以让我看到模块的实际运行时间。在 python 中使用 valgrind 似乎很复杂stackoverflow.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 倍。