当前位置: 首页 > 面试题库 >

如何使用Python分析器获得调用树?

柯天宇
2023-03-14
问题内容

我曾经使用内置在html" target="_blank">系统监视器
应用程序中的漂亮Apple Profiler 。只要您的C ++代码是用调试信息编译的,您
就可以对正在运行的应用程序进行采样,并且它将打印出一个缩进的树,
告诉您该函数花了父函数时间的百分比
(以及主体函数与其他函数调用的时间) 。

例如,如果main调用了function_1和function_2,先function_2调用function_3,然后调用main调用function_3

main (100%, 1% in function body):
    function_1 (9%, 9% in function body):
    function_2 (90%, 85% in function body):
        function_3 (100%, 100% in function body)
    function_3 (1%, 1% in function body)

我会看到这样的想法,并认为:“
主体代码中的某些事情花费了很长时间function_2。如果我希望我的程序更快,那是我
应该开始的地方。”

如何最轻松地为Python
程序获得此准确的概要分析输出?

我见过有人说要这样做:

import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time")  # Or cumulative
stats.print_stats(80)  # 80 = how many to print

但是,与优雅的调用树相比,这非常混乱。如果
您可以轻松做到这一点,请告诉我,这会有所帮助。


问题答案:

在此库http://pycallgraph.slowchop.com/中查看调用图。它
真的很好。如果要分析特定功能,请查看
http://mg.pov.lt/blog/profiling.html

这是来自profilehooks模块的结果。



 类似资料:
  • 我的火花java应用程序在我们内部实验室的远程机器上运行。为了分析远程应用程序的内存消耗,通过使用本地机器的“附加模式”(在jpenable的帮助下)将远程应用程序pid附加到JProfiler。 将远程应用程序连接到本地机器中的JProfiler后,“分配树”仅显示非数组对象分配。我还想知道本地机器上的数组分配。 请帮助我了解JProfiler的阵列分配。 谢谢,纳根德拉

  • 问题内容: 我需要在onclick事件的调用对象上有一个处理程序 即 我想在不使用jquery的$()。click或$()。live的情况下执行此操作,但要使用上述方法。 问题答案: 传递内联点击处理程序 或在函数中使用根据[W3C DOM 2级事件模型 但是,当然,IE是不同的,因此处理此问题的原始JavaScript方法是 或更详细 其中是被传递到在比IE其他浏览器的功能。 如果您使用的是jQ

  • 问题内容: 获得监视器分辨率(最好是在元组中)的最简单方法是什么? python 屏幕 分辨率 问题答案: 在Windows上: 如果使用高分辨率屏幕,请确保你的python解释器为HIGHDPIAWARE。

  • 问题内容: import urllib2 到目前为止,一切都很好。 但是我只希望纯文本HTML中的href链接。我怎么解决这个问题? 问题答案: 尝试使用Beautifulsoup: 如果您只想要以开头的链接,则应使用: 在带有BS4的Python 3中,它应该是:

  • 问题内容: 我的Go程序需要知道所有系统和用户进程的当前cpu使用率。 我如何获得? 问题答案: 我遇到了类似的问题,但从未找到轻量级的实现。这是我的解决方案的精简版,可以回答您的特定问题。我按照tylerl的建议对文件进行采样。您会注意到,我在两次采样之间等待3秒以匹配top的输出,但是在1或2秒的情况下我也取得了不错的结果。我在go例程中的循环中运行类似的代码,然后在需要其他go例程时访问cp

  • 使用分配分析器工具来查找未被正确地垃圾收回收,并继续保留在内存中的对象。 分配分析器如何工作 allocation profiler(分配分析器)结合了堆分析器中快照的详细信息以及Timeline(时间轴)面板的增量更新以及追踪信息。与这些工具相似,追踪对象堆的分配过程包括开始记录,执行一系列操作,以及停止记录并分析。 分配分析器在记录中周期性生成快照(频率为每50毫秒),并且在记录最后停止时也会