如何计算Python程序运行所需的时间?

5
有没有一种简单的方法来计算Python程序的执行时间?
澄清:整个程序
5个回答

8

使用 timeit

这个模块提供了一种简单的方法来计时小段 Python 代码。它既有命令行界面,也有可调用接口。它避免了许多常见的测量执行时间的陷阱。

您需要在字符串中使用一个 Python 语句;如果您的代码中有一个主函数,您可以像这样使用它:

>>> from timeit import Timer
>>> timer = Timer('main()', 'from yourmodule import main')
>>> print timer.timeit()

第二个字符串提供了设置,为第一个语句计时提供环境。第二部分不被计时,旨在设置舞台。然后默认情况下,第一个字符串会被运行一百万次以获得准确的时间。如果您需要更详细的慢速信息,请使用其中之一python profilers:。分析器是描述程序运行时性能并提供各种统计信息的程序。通过使用命令行中的cProfile模块,最简单的方法是运行此操作:
$ python -m cProfile yourprogram.py

1
我看了一下链接,发现有点混乱。是否有一个简单的脚本可以展示如何使用它? - MyNameIsKhan
1
timeit 用于微基准测试:小程序片段,而不是整个程序。 - user395760
有没有办法让它不要运行一百万次?我的程序耗时超过一秒,这意味着完成需要很多天。 - MyNameIsKhan
我认为即使在问题的初始版本中,整个程序也很清楚。自那时以来,它已被编辑为明确说明(您之后进行了编辑,而没有放弃timeit方法)。但现在您的答案已被接受,所以这有点无关紧要。 - user395760
@delnan,我的大多数程序在速度方面都在一秒钟左右,因此准确性确实很重要。您是说timeit在这里仍然不合适吗?您会推荐什么呢? - MyNameIsKhan
显示剩余7条评论

5

如果你使用的是Linux/Unix/POSIX兼容平台,只要使用time即可。这样做不会干扰你的脚本,也不会因为过于详细(对你来说)的剖析而拖慢它的速度。当然,你可以用它来做任何事情,不仅限于Python脚本。


5

您可能想要使用内置的分析器

另外,您可能希望通过使用以下简单的装饰器来测量函数的运行时间:

import time
def myprof(func):
    def wrapping_fun(*args):
        start = time.clock()
        result = func(*args)
        end = time.clock()
        print 'Run time of %s is %4.2fs' % (func.__name__, (end - start))
        return result
    return wrapping_fun

使用方法:

@myprof
def myfun():
    # function body 

这是一个相当糟糕的性能分析函数。我不会依赖它来进行任何值得基准测试/性能分析的工作。 - user395760
1
许多原因,其中大部分可以归结为“我们没有一个人足够聪明,可以轻松地做得很好”。首先,time.clock不是所有平台上最精确的时钟(请参见由timetit定义的default_clock()),而且输出非常有限(与程序输出交织在一起,需要手动收集和解析)。小问题包括不考虑异常和不使用functools.wrap - user395760
@delnan:您说得完全正确,它绝对不是用于性能分析的通用工具,但有时我会将其用作代码片段。 - cval

2

对于代码片段,请使用timeit模块。

对于整个程序,请使用cProfile模块。


2
使用 timeit 来进行时间测量。
>>> import timeit  
>>> t = timeit.Timer(stmt="lst = ['c'] * 100")  
>>> print t.timeit()  
1.10580182076  
>>> t = timeit.Timer(stmt="lst = ['c' for x in xrange(100)]")  
>>> print t.timeit()  
7.66900897026  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接