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

Nic*_*ick 19 python profiler pycharm

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

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

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

sha*_*een 16

根据您的需求和您的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")
Run Code Online (Sandbox Code Playgroud)


Out*_*rce 11

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

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

实际上,通过实例化Profile并根据需要启用和禁用来做.为了使其有用,您需要将其保存到文件中.

  • 在代码的外部部分中,实例化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')
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,profiler插件是PyCharm的Professional(非免费)版本. (7认同)
  • @ y3sh内置的探查器在整个时间内运行,而在某些点放置配置文件代码,调用启用/禁用,允许您放大要查看的特定代码区域.涉及完整运行的所有输出可能很费力,并且当您感兴趣的区域已知时,可能存在比您(I)可能想要处理的噪声更多的噪声.您可以从运行配置开始,然后在找到故障区域后切换到我显示的内容?OP解释了这个难度 - 噪音太大了. (4认同)
  • 这与使用内置的分析器有什么不同?https://www.jetbrains.com/help/pycharm/profiler.html (2认同)

Ohu*_*nen 10

我很惊讶还没有人提到 SnakeViz。除了 Spyder 的分析器之外,这是迄今为止我能找到的最好的 Python 分析器:

pip install snakeviz
Run Code Online (Sandbox Code Playgroud)

然后:

python -m cProfile -o program.prof my_program.py
snakeviz program.prof
Run Code Online (Sandbox Code Playgroud)

它将在您的浏览器中打开一些漂亮的可视化效果:

SnakeViz 演示