Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248819
  • 博文数量: 44
  • 博客积分: 1052
  • 博客等级: 少尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 16:51
文章分类

全部博文(44)

文章存档

2013年(7)

2012年(14)

2011年(23)

分类: Python/Ruby

2011-11-13 10:41:05

记录timeit和cProfile模块的使用方法。

timeit模块
  1. class timeit.Timer([stmt='pass'[, setup='pass'[,timer=<timer function>]]])
返回一个Timer对象。
stmt表示要测试的语句,多条语句可以用';'隔开,stmt也可以指定可调用对象,如函数。
setup表示执行stmt之前要执行的语句
timer指定计时函数,一般不用自己指定,用默认的即可。
返回Timer对象后,再调用该对象的timeit()或repeat()方法就可以进行计时。

  1. Timer.print_exc([file=None])     # 输出计时代码的traceback,默认输出到sys.stderr,也可以指定文件
 # 常见的使用方式
  1. t = Timer(...)
  2. try:
  3.     t.timeit(...)
  4. except:
  5.     t.print_exc()
  1. Timer.repeat([repeat=3[, number=1000000]])
repeat()函数会循环的调用timeit()函数,参数中的repeat指明调用timeit()的次数,第二个参数nunber是提供给timeit()的参数。

  1. Timer.timeit([number=1000000])
timeit()函数会指定stmt语句number次,并返回总的时间,在此之前会执行setup语句一次。返回的时间为秒,浮点数。
默认的,在执行timeit()函数时,不进行垃圾回收,但有时候垃圾回收对代码影响挺大的。这样可以如下方式开启垃圾回收。

  1. time.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()
在setup中使用gc.enable()来开启垃圾回收机制。

timeit模块还提供了两种简单的调用方式:
  1. timeit.repeat(stmt[,setup,[timer[,repeat=3[,number=1000000]]]])

  2. time.timeit(stmt[,setup[,timer[,number=1000000]]])

timeit模块还提供命令行模式来测试代码性能,这个比较方便。
  1. 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]的和
  1. $ python -m timeit -s 's = 0' 'for i in range(101): s+=i'
  2. 100000 loops, best of 3: 8.36 usec per loop

  3. $ python -m timeit 'sum(range(101))'
  4. 100000 loops, best of 3: 3.99 usec per loop

  5. $ python -m timeit 'sum(xrange(101))'
  6. 100000 loops, best of 3: 2.24 usec per loop

  7. $ python -m timeit -r 10 'sum(xrange(101))'
  8. 100000 loops, best of 10: 2.53 usec per loop

  9. [zxg@zxg-pc ~]$ python
  10. >>> import timeit
  11. >>> t = timeit.Timer('s = sum(xrange(101))')
  12. >>> t.repeat(4)
  13. [2.2719430923461914, 2.2633171081542969, 2.2535910606384277, 2.2526609897613525]
  14. >>>
可以去timeit.py看看timeit模块的源代码,其实它本身并没啥特别的。


抱歉,待续...

阅读(3166) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~