- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Python 2.7 和 Python 3.6 中,我发现这有效:
from cProfile import Profile; p = Profile(); p.enable()
...而这引发了一个异常(exception):
from profile import Profile; p = Profile(); p.enable()
# --> AttributeError: 'Profile' object has no attribute 'enable'
这让我感到惊讶,因为我认为(以及
Python 3 和
Python 2 状态的官方文档)这两个模块应该提供相同的程序员接口(interface):
Both the
profile
andcProfile
modules provide the following functions:...
class profile.Profile(timer=None, timeunit=0.0, subcalls=True, builtins=True)
...
enable()
Start collecting profile data.
profile.Profile()
的正确方法是什么?实例?
最佳答案
截至 Python 3.8和更新的文档,他们已修复此问题以指定 enable()
和 disable()
仅适用于 cProfile
.与 profile.Profile
,您需要使用 run()
与 enable()
相对的调用和 disable()
.以下是每个示例:
cProfile.Profile:
# cProfile.Profile -- control with enable() and disable()
from datetime import datetime
import cProfile, pstats, io
sortby = 'cumulative'
pr1 = cProfile.Profile(lambda: int(datetime.now().timestamp()*1000000), 0.000001)
pr1.enable()
list(x for x in range(int(10*10*10*10/10*10+10)))
pr1.disable()
s1 = io.StringIO()
ps1 = pstats.Stats(pr1, stream=s1).sort_stats(sortby)
ps1.print_stats()
print(s1.getvalue())
个人资料。个人资料:
# profile.Profile -- control with run()
from datetime import datetime
import profile, pstats, io
sortby = 'cumulative'
pr2 = profile.Profile(datetime.now().timestamp, 0.000001)
pr2.run('list(x for x in range(int(10*10*10*10/10*10+10)))')
s2 = io.StringIO()
ps2 = pstats.Stats(pr2, stream=s2).sort_stats(sortby)
ps2.print_stats()
print(s2.getvalue())
以下是我在两种形式之间观察到的一些行为差异:
cProfile
将分析函数的输出推送到标准输出,而 profile
将不会。filename:lineno(function)
列的输出略有不同。 cProfile
一般会更易读地显示内置函数。profile
中识别。的输出而不是在 cProfile
's -- 但如果使用命名函数,它在两个分析器的输出中都是可识别的(尽管传递给函数的参数只能从 profile
的输出中看到)。 cProfile
和 profile
提供略有不同的结果。好像cProfile
通常会生成大约两个更少的函数调用,并且将为相同的函数提供更有效的时间。timer
和 timeunit
参数可以提供获得微秒精度与默认毫秒精度的好处。但是,似乎尝试使用这些带有一些警告:cProfile
的 timeunit 函数需要一个整数,而 profile
需要一个浮点数。这意味着您不能使用 datetime.now().timestamp()
直接与 cProfile
,但必须先将其包装在 lambda 中以将其转换为完整整数。 profile
datetime.now().timestamp()
似乎不能正常工作即使这是它所期望的格式。它将打印出负时间值——我在下面展示了这一点。切换到 lambda 形式以将其转换为整数无济于事,如 profile
期望浮点数。 profile.Profile
的输出与 datetime.now().timestamp()
用于微秒设置的计时器。 print(s2.getvalue())
10015 function calls in -0.020 seconds`
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
0 0.000 0.000 profile:0(profiler)
1 0.000 0.000 0.000 0.000 :0(setprofile)
10011 -0.010 -0.000 -0.010 -0.000 <string>:1(<genexpr>)
1 -0.010 -0.010 -0.020 -0.020 <string>:1(<module>)
1 -0.000 -0.000 -0.020 -0.020 :0(exec)
1 -0.000 -0.000 -0.020 -0.020 profile:0(list(x for x in range(int(10*10*10*10/10*10+10))))
datetime.now()
以提供与 datetime.now().timestamp()
完全相同的输出格式),原因我无法解释。def timenow():
now = datetime.now()
return (((now.year-1970) * 31557600) + (now.month * 2629800) +
(now.day * 86400) + (now.hour * 3600) + (now.minute * 60) +
now.second + (now.microsecond * 0.000001))
我们现在可以使用
pr2 = profile.Profile(timenow, 0.000001)
,这将输出以下(理智的)报告:
>>> print(s2.getvalue())
10015 function calls in 0.041 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.006 0.006 0.041 0.041 profile:0(list(x for x in range(int(10*10*10*10/10*10+10))))
1 0.000 0.000 0.035 0.035 :0(exec)
1 0.017 0.017 0.035 0.035 <string>:1(<module>)
10011 0.018 0.000 0.018 0.000 <string>:1(<genexpr>)
1 0.001 0.001 0.001 0.001 :0(setprofile)
0 0.000 0.000 profile:0(profiler)
与
cProfile
的输出比较(使用上面定义的自定义 lambda 计时器),我们有:
>>> print(s1.getvalue())
10013 function calls in 0.031 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
10011 0.031 0.000 0.031 0.000 <stdin>:1(<genexpr>)
1 0.000 0.000 0.000 0.000 <stdin>:1(<module>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
至于为什么我们的自定义计时器函数给出了合理的结果和
datetime.now().timestamp()
不与
profile
,首先要说明的是
timenow
不提供时间给
datetime.now().timestamp()
.尽管它提供了接近纪元的时间,但它的偏差很小(不会影响正常的配置文件运行,因为增量在同一系统上是相同的)。
timenow
中使用的手动转换也肯定不如
datetime.now().timestamp()
有效.我只能推测后者效率太高,而且
profile
不知何故。结果,源代码没有正确测量。
cProfile
除非你有特定的理由不这样做。官方 Python 文档还指出推荐的模块是
cProfile
.尽管没有提供具体的理由,文档似乎暗示
cProfile
可能表现更好并适合大多数用户的目的(即使它是一种稍微冗长的语法)。
关于python - cProfile 和 profile 的区别——为什么没有 profile.Profile.enable() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998945/
在 Python 2.7 和 Python 3.6 中,我发现这有效: from cProfile import Profile; p = Profile(); p.enable() ...而这引发了
我正在尝试在 Windows 8 PRO 64 位上的 Visual Studio 2012 RTM 中为控制台程序启动性能分析 session (分析/启动性能分析)。 我收到一条弹出消息通知我 C
我在 windows 上有一个应用程序,它在单声道上运行得很好。但是,当我尝试对其进行分析时: mono --profile=log program.exe 我得到: The 'log' profil
我正在尝试使用 Django 创建注册表单。我在提交表单时收到此错误。 这就是我所做的。 models.py from django.db import models from django.cont
是否可以从 Flash Builder 导出分析结果? 我需要它们,因为我想根据方法名称进行过滤,但 Flash Builder 的内置过滤不允许这样做。 最佳答案 它隐藏在 GUI 的一个完全隐蔽、
我真的很喜欢热图,但我需要的是热图背后的数字(又名相关矩阵)。 有没有简单的方法来提取数字? 最佳答案 从文档开始追踪有点困难;具体来说 来自 report structure然后深入研究以下函数 g
我有一个 POM,它声明了我的项目常见的 Web 应用程序内容。我将它用作所有 Web 应用程序的父级。 是否可以仅在包装为 war 时激活配置文件?我已经尝试过属性方法,但这不起作用(因为它不是系统
在数据帧上运行 pandas-profiling 时,我看到它将索引分析为一个变量。注意:我的索引是唯一键(命名为UUID) 有没有办法排除引入索引上报? 我知道我可以在 pandas 中删除它,但在
在数据帧上运行 pandas-profiling 时,我看到它将索引分析为一个变量。注意:我的索引是唯一键(命名为UUID) 有没有办法排除引入索引上报? 我知道我可以在 pandas 中删除它,但在
我正在使用 Intel Vtune 来分析需要在另一台机器上进行 sudo 访问的远程应用程序。之前我已经能够在不需要 sudo 访问的那台机器上分析远程应用程序,但英特尔 Vtune 不适用于需要
我已经在我的 MVC 4 应用程序上安装了 Mini-Profiler,它运行得非常棒。我遇到的唯一问题是 UI 覆盖了我 UI 的关键部分。我可以使用 css 在页面上移动它,但理想情况下我想这样做
在使用 Chrome devtools 分析堆快照时,我似乎无法弄清楚查看分离的 DOM 树时颜色的含义。红色和黄色有什么区别? 最佳答案 有很好的解释available here . 从文章: Re
分析器中 SQL Server 跟踪的输出包含 CPU 和持续时间列(以及其他列)。这些值的单位是什么? 最佳答案 CPU 以毫秒为单位。在 sql server 2005 及更高版本中,保存到文件或
我有一个奇怪的问题,我正在使用 MiniProfiler,它很棒,在我的本地机器上没有任何问题,但它在我们的测试服务器上的表现似乎有所不同。它似乎会生成许多对 mini-profiler-resour
我想知道优先级 的application-{profile}.properties文件,如果有多个 spring.profiles.active添加。 例如: 比方说,我有这个 spring.prof
我有一个名为“isActive”的助手和一个名为“create”的模板.. 见下文 Template.create.isActive = function () { return Meteor.u
这是我面临的场景:我正在使用 MiniProfiler 来分析一些操作。但它缺少我必须使用的特定功能。有一个设置文件 MiniProfiler 可以让我做一些配置,比如分析什么考虑什么,什么不考虑,什
哇,这完全令人困惑,而且 dojo 1.8 文档似乎是围绕构建层的完整 clusterf**k。有人知道那里发生了什么吗? 在构建脚本示例配置文件中,示例 amd.profile.js 有 profi
我正在为一个内部项目使用出色的 MVC Mini Profiler,但希望它能够显示时间信息,无论您是谁。理想情况下,如果用户是站点的管理员或开发人员,我希望能够显示完整的分析信息,如果用户只是标准用
打开Android Profiler编译出现如下错误: FAILURE:构建失败并出现异常。 什么地方出了错: Execution failed for task ':app:transformCla
我是一名优秀的程序员,十分优秀!