与此类似:
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试图估计字节码编译时间等(并从运行时间减去这些时间),所以更具体。
我想知道:
答案 0 :(得分:1)
配置文件和cProfile有无与估算编译时间有关。他们估计运行时间。
编译时间不是性能问题。不希望每次运行时编译代码? import
它,它将保存为.pyc
,只有在您更改后才会重新编译。编译代码需要多长时间(它非常快)并不重要,因为每次运行都不需要这样做。
如果您想要编制时间,可以使用compiler package。
基本上:
from timeit import timeit
print timeit('compiler.compileFile(' + filename + ')', 'import compiler', number=100)
将打印编译filename
100次所需的时间。
如果在func
内,你附加到某些列表,做一些添加,在字典中查找一些变量,profile
会告诉你这些事情需要多长时间。
您的版本没有告诉您任何这些内容。它也非常不准确 - 您获得的时间取决于查找clock
的{{1}}属性然后调用它所需的时间。
如果您想要的是为一小段代码计时,请使用timeit
。如果您想profile代码,请使用time
或profile
。如果你想知道任意代码运行多长时间,而不是哪个部分最慢,那么你的版本就好了,只要代码不带只需几毫秒。
答案 1 :(得分:0)
配置文件比cProfile慢,但支持线程。
cProfile要快得多,但AFAIK不会对线程进行概要分析(只有主线程,其他线程将被忽略)。