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
    有哪些功能是你的版本没有的。它一行一行地告诉你你的函数花了多少时间,做每件事花了多少时间,而不仅仅是总的运行时间。