我一直在使用cProfile来分析我的代码,并且效果很好。我还使用gprof2dot.py可视化结果(使其更加清晰)。
但是,cProfile(以及到目前为止我见过的大多数其他Python探查器)似乎仅在函数调用级别进行探查。当从不同位置调用某些函数时,这会引起混乱-
我不知道调用#1或调用#2是否占用了大部分时间。当所讨论的函数有六个层次的深度(从其他七个地方调用)时,情况甚至更糟。
如何获得逐行分析?
代替这个:
function #12, total time: 2.0s
我想看这样的东西:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
cProfile确实显示了“转移”到父级的总时间,但是当您有许多层和相互连接的呼叫时,该连接也会丢失。
理想情况下,我希望拥有一个可以解析数据的GUI,然后向我显示源文件以及每行的总时间。像这样:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
然后,我可以单击第二个“ func(c)”调用,以查看该调用中所占用的时间,与“ func(a)”调用分开。那有意义吗?
我相信这就是Robert
Kern的line_profiler
的目的。从链接:
File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
149 @profile
150 def Proc2(IntParIO):
151 50000 82003 1.6 13.5 IntLoc = IntParIO + 10
152 50000 63162 1.3 10.4 while 1:
153 50000 69065 1.4 11.4 if Char1Glob == 'A':
154 50000 66354 1.3 10.9 IntLoc = IntLoc - 1
155 50000 67263 1.3 11.1 IntParIO = IntLoc - IntGlob
156 50000 65494 1.3 10.8 EnumLoc = Ident1
157 50000 68001 1.4 11.2 if EnumLoc == Ident1:
158 50000 63739 1.3 10.5 break
159 50000 61575 1.2 10.1 return IntParIO
问题内容: 我有一个正在Linux上运行的C ++应用程序,我正在对其进行优化。如何确定我的代码哪些区域运行缓慢? 问题答案: 如果您的目标是使用探查器,请使用建议的探查器之一。 但是,如果您急于在主观上很慢的情况下在调试器下手动中断程序,则有一种简单的方法可以查找性能问题。 暂停几次,每次查看调用堆栈。如果有一些代码浪费了一定百分比的时间(20%或50%或其他),那么这就是您在每次采样时都将其捕
Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,它在内部被用于实现 property、方法、类方法、静态方法和 super 类型。 描述符类基于以下 3 个特殊方法,换句话说,这 3 个方法组成
问题内容: 我想遍历整个文件的每一行。一种方法是读取整个文件,将其保存到列表中,然后遍历感兴趣的行。此方法占用大量内存,因此我正在寻找替代方法。 到目前为止,我的代码: 执行此代码将显示错误消息:。 有什么建议么? 目的是计算成对的字符串相似度,这意味着对于文件中的每一行,我要计算每隔一行的距离。 问题答案: 正确的,完全Python的读取文件的方法如下: 该with语句处理文件的打开和关闭,包括
我正试图弄清楚如何在OpenAPI中记录我的两个查询参数。 null 键是一个关联数组,可以包含API中的资源名称集合列表。分配给每个筛选项的值是单个id或逗号分隔的id列表。 排序 For排序也遵循JSON:API建议,因此如下所示: null 例如,我不确定是否可以指定过滤器键是一个关联数组,或者它接受逗号分隔的ID列表。对于排序几乎同样的问题:如何表示逗号分隔的排序字段列表?
本文向大家介绍Python描述器descriptor详解,包括了Python描述器descriptor详解的使用技巧和注意事项,需要的朋友参考一下 前面说了descriptor,这个东西其实和Java的setter,getter有点像。但这个descriptor和上文中我们开始提到的函数方法这些东西有什么关系呢? 所有的函数都可以是descriptor,因为它有__get__方法。 注意,函数对
计算机科学是一个极其宽泛的学科。全球的分布式系统、人工智能、机器人、图形、安全、科学计算,计算机体系结构和许多新兴的二级领域,每年都会由于新技术和新发现而扩展。计算机科学的快速发展广泛影响了人类生活。商业、通信、科学、艺术、休闲和政治都被计算机领域彻底改造。
问题内容: 在史前时代(Python 1.4)中,我们做到了: 在Python 2.1之后,我们做到了: 在Python 2.3中获得便利的迭代器协议之前,它可以做到: 我看过一些使用更详细的示例: 这是首选的方法吗? [edit]我知道with语句可以确保关闭文件…但是为什么文件对象的迭代器协议中没有包含该语句呢? 问题答案: 偏爱以下原因的确有一个原因: 我们都为CPython的相对确定性的引
问题内容: 这是字典 使用这个 它打印以下内容: 但是我希望程序像这样打印它: 我刚刚开始学习字典,所以不确定如何执行此操作。 问题答案: 输出: