python中测耗时

ipython中的time和timeit

在ipython中直接使用time命令就可以获取user、sys、total三个时间了:

n = 10000
time m = sum(range(n))

使用timeit可以从另一个角度进行测试,它会自动选择跑多少轮,每轮跑多少次,并输出最好成绩:

In [11]: l = list(xrange(5000))

In [12]: s = set(xrange(5000))

In [15]: timeit r = [i for i in xrange(100000) if i in l]
1 loops, best of 3: 4.75 s per loop

In [16]: timeit r = [i for i in xrange(100000) if i in s]
100 loops, best of 3: 4.51 ms per loop

从上面的例子,还可以看出一点,在python中选择合适的数据结构非常重要,对于除重这种不起眼的代码, 选择list和选择set,在耗时上相差一千倍。

在python中导入timeit

直接通过import导入timeit模块,然后调用timeit()函数也是一样的:

import timeit
timeit.timeit('d = [i for i in xrange(100000) if i in l]', 'from __main__ import l', number=1)
4.918792963027954
timeit.timeit('d = [i for i in xrange(100000) if i in s]', 'from __main__ import s', number=1)  
0.005738973617553711

在命令行中使用timeit

使用方法区别不大,不再赘述,可参考帮助:

python -m timeit --help

更精细的性能分析

有profile、cProfile和hotshot三种,功能差不多:

python -m cProfile -o test.out test.py

输出性能内容:

python -c "import pstats; p=pstats.Stats('test.out'); p.print_stats()"

或者直接进行交互输出:

python -m pstats test.out 

通过graphviz之类的工具还能输出成框图。

发表于 2014年10月08日 00:39   评论:0   阅读:2133  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo