使用Profile或cProfile可以获得什么?

时间:2011-08-20 08:40:45

标签: 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()
        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)我怎样才能编写自己的探查器 帐户编译时间?

2 个答案:

答案 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代码,请使用timeprofile。如果你想知道任意代码运行多长时间,而不是哪个部分最慢,那么你的版本就好了,只要代码不带只需几毫秒

答案 1 :(得分:0)

配置文件比cProfile慢,但支持线程。

cProfile要快得多,但AFAIK不会对线程进行概要分析(只有主线程,其他线程将被忽略)。