【问题标题】:Profiling a python program with PyCharm (or any other IDE)使用 PyCharm(或任何其他 IDE)分析 python 程序
【发布时间】:2015-12-31 19:48:48
【问题描述】:

我正在运行一个相对复杂的 python 程序,其中有一个占用大部分时间的蒙特卡罗模拟。我想知道它的哪一部分使用的资源最多,这样我就可以让它更快。

我正在使用 PyCharm 专业版并尝试使用分析器,但结果只是一大堆我从未听说过的不相关函数。

问题:我可以使用一个好的分析器来提供有意义的结果,以便我可以查看在我的蒙特卡罗模拟中哪个函数或关键字使用的资源最多?

【问题讨论】:

  • 不要尝试this。它不花钱,而且在告诉你什么需要时间方面非常有效。

标签: python pycharm profiler


【解决方案1】:

注意:如 cmets 中所述,以下内容适用于 PyCharm 的付费版本:

如果使用 3.x(不了解 2.x),我将添加到 shafeen 的答案中,并根据原始帖子使其更加具体 PyCharm。这也更适用于 Web 应用程序或大型应用程序,而不是简单的命令行程序,在这些程序中将输出打印到 stdout 可能没问题(最好能够通过 PyCharm 的查看器对不同的方式进行排序)。

确实,按照建议通过实例化配置文件并根据需要启用和禁用。不过,为了使其有用,您需要将其保存到文件中。

  • 在代码的外部,实例化 Profile。
  • 在代码的内部,进行分析。
  • 现在,调用 pr.dump_stats('profile.pstat')

您现在有一个要检查的配置文件。转到工具|打开 CProfile 快照。选择 profile.pstat,现在您可以根据需要查看和排序不同的标题。

总结

import cProfile as profile

# In outer section of code
pr = profile.Profile()
pr.disable()

# In section you want to profile
pr.enable()
# code of interest
pr.disable()

# Back in outer section of code
pr.dump_stats('profile.pstat')

在 PyCharm 的 CProfile 查看器中打开文件。

【讨论】:

  • 不幸的是,分析器插件位于 PyCharm 的专业(非免费)版中。
  • 这与使用内置分析器有何不同? jetbrains.com/help/pycharm/profiler.html
  • @y3sh 内置分析器会一直运行,而将配置文件代码放置在某些点,调用启用/禁用,允许您放大要查看的特定代码区域。遍历完整运行的所有输出可能会很费力,并且当您的兴趣区域已知时,可能会产生比您(我)想要处理的更多的噪音。您可以从运行配置开始,然后在找到问题区域后切换到我显示的内容? OP 解释了这个非常困难的问题 - 噪音太大。
  • 这是否提供有关调用树的信息,该调用树导致花费大量时间的函数,以阐明低级别调用的来源,因此您对调用树有足够的了解以理解在哪里优化东西? cfstackoverflow.com/questions/4544784/…
【解决方案2】:

根据您的需要和您的 python 版本,也许您想使用类似 hotshot 的东西。 https://docs.python.org/2/library/hotshot.html

编辑:

对于 python 3.4,cProfile 可能是您可用的最佳选择之一,但您肯定必须使用 grep/sed/awk 过滤结果才能获得相关结果,特别是如果您使用导入的库,其中有很多发生的内部呼叫。

我喜欢按调用次数排序: python -m cProfile -s 'calls' <your_program>.py

现在在 python3 中使用该方法的问题是如果在外部调用 cProfile 将显示的原始调用的数量,因此在内部运行它可能是一个更好的主意:

import cProfile

pr = cProfile.Profile()
pr.enable()
your_function_call()
pr.disable()
# after your program ends
pr.print_stats(sort="calls")

【讨论】:

  • 我使用的是 Python 3.4。
猜你喜欢
  • 2019-04-09
  • 2016-12-10
  • 2016-09-01
  • 2015-08-07
  • 1970-01-01
  • 2015-12-29
  • 2010-09-07
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多