Python 使用配置文件或cProfile有什么好处
而不是像这样的东西:Python 使用配置文件或cProfile有什么好处,python,profiling,Python,Profiling,而不是像这样的东西: def time_this(func): @functools.wraps(func) def what_time_is_it(*args, **kwargs): start_time = time.clock() print 'STARTING TIME: %f' % start_time result = func(*args, **kwargs) end_time = time.clock
def time_this(func):
@functools.wraps(func)
def what_time_is_it(*args, **kwargs):
start_time = time.clock()
print 'STARTING TIME: %f' % start_time
result = func(*args, **kwargs)
end_time = time.clock()
print 'ENDING TIME: %f' % end_time
print 'TOTAL TIME: %f' % (end_time - start_time)
return result
return what_time_is_it
我这样问是因为写这样的描述对我来说似乎更容易、更清晰。我认识到profile/cprofile试图估算字节码编译时间等(并从运行时间中减去这些时间),因此更具体地说
我想知道:
- a) 什么时候编译时间对于这样的问题变得足够重要 分歧重要吗
- b) 我该如何着手编写自己的剖析器,将 帐户编译时间
Profile和cProfile与估计编译时间无关。他们估计运行时间 编译时间不是性能问题。不希望每次运行时都编译代码吗<代码>导入它,它将保存为
.pyc
,并且只有在您更改它时才重新编译。编译代码需要多长时间并不重要(速度非常快),因为不必在每次运行时都这样做
如果您想计时编译,可以使用
基本上:
from timeit import timeit
print timeit('compiler.compileFile(' + filename + ')', 'import compiler', number=100)
将打印编译filename
100次所需的时间
如果在func
中添加一些列表,进行一些添加,在字典中查找一些变量,profile
将告诉您这些操作需要多长时间
你的版本没有告诉你这些事情。它也非常不准确——您得到的时间取决于查找time
的clock
属性然后调用它所需的时间
如果您希望对一小段代码计时,请使用。如果要编码,请使用
profile
或cProfile
。如果您想知道的是任意代码运行所需的时间,而不是其中最慢的部分,那么您的版本就可以了,只要代码不需要几毫秒配置文件比cProfile慢,而是支持线程
cProfile的速度要快得多,但恐怕它不会分析线程(只有主线程,其他线程将被忽略)。ack,抱歉,我的评论是指——我认识到cProfile和profile从实际运行时间中减去编译时间。我现在就要编辑这篇文章了。我还回答了你关于
profile
有哪些功能是你的版本没有的。它一行一行地告诉你你的函数花了多少时间,做每件事花了多少时间,而不仅仅是总的运行时间。