使用PyCharm(或任何其他IDE)分析python程序

时间:2015-10-03 19:53:27

标签: python pycharm profiler

我正在运行一个相对复杂的python程序,其中有一个montecarlo模拟占用了大部分时间。我想找出它使用最多资源的部分,以便我可以更快地使用它。

我正在使用PyCharm Professional版本并尝试使用分析器,但结果只是我从未听说过的大量无关功能。

问题:我是否有一个好的剖析器可以提供有意义的结果,因此我可以看到哪个函数或关键字在我的montecarlo模拟中使用了最多的资源?

2 个答案:

答案 0 :(得分:10)

注意:如评论中所述,以下内容适用于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查看器中打开文件。

答案 1 :(得分:9)

根据您的需求和您的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")
相关问题