记录timeit和cProfile模块的使用方法。
timeit模块
- class timeit.Timer([stmt='pass'[, setup='pass'[,timer=<timer function>]]])
返回一个Timer对象。
stmt表示要测试的语句,多条语句可以用';'隔开,stmt也可以指定可调用对象,如函数。
setup表示执行stmt之前要执行的语句
timer指定计时函数,一般不用自己指定,用默认的即可。
返回Timer对象后,再调用该对象的timeit()或repeat()方法就可以进行计时。
- Timer.print_exc([file=None]) # 输出计时代码的traceback,默认输出到sys.stderr,也可以指定文件
# 常见的使用方式
-
t = Timer(...)
-
try:
-
t.timeit(...)
-
except:
-
t.print_exc()
- Timer.repeat([repeat=3[, number=1000000]])
repeat()函数会循环的调用timeit()函数,参数中的repeat指明调用timeit()的次数,第二个参数nunber是提供给timeit()的参数。
- Timer.timeit([number=1000000])
timeit()函数会指定stmt语句number次,并返回总的时间,在此之前会执行setup语句一次。返回的时间为秒,浮点数。
默认的,在执行timeit()函数时,不进行垃圾回收,但有时候垃圾回收对代码影响挺大的。这样可以如下方式开启垃圾回收。
- time.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()
在setup中使用gc.enable()来开启垃圾回收机制。
timeit模块还提供了两种简单的调用方式:
- timeit.repeat(stmt[,setup,[timer[,repeat=3[,number=1000000]]]])
-
-
time.timeit(stmt[,setup[,timer[,number=1000000]]])
timeit模块还提供命令行模式来测试代码性能,这个比较方便。
- python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement ...]
-n N : 执行statement的次数
-r N : repeat的次数,默认为3
-s S : 指定setup语句
-t : 使用time.time()函数来计时,非windows下默认用该函数计时
-c : 使用time.clock()函数来计时,windows下默认用该函数计时
-h : 打印帮助
例子:
计算[1, 2, ... , 100]的和
- $ python -m timeit -s 's = 0' 'for i in range(101): s+=i'
-
100000 loops, best of 3: 8.36 usec per loop
- $ python -m timeit 'sum(range(101))'
-
100000 loops, best of 3: 3.99 usec per loop
- $ python -m timeit 'sum(xrange(101))'
-
100000 loops, best of 3: 2.24 usec per loop
- $ python -m timeit -r 10 'sum(xrange(101))'
-
100000 loops, best of 10: 2.53 usec per loop
-
[zxg@zxg-pc ~]$ python
-
>>> import timeit
-
>>> t = timeit.Timer('s = sum(xrange(101))')
-
>>> t.repeat(4)
-
[2.2719430923461914, 2.2633171081542969, 2.2535910606384277, 2.2526609897613525]
-
>>>
可以去timeit.py看看timeit模块的源代码,其实它本身并没啥特别的。
抱歉,待续...
阅读(3233) | 评论(0) | 转发(0) |