在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,在耗时上相差一千倍。
直接通过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
使用方法区别不大,不再赘述,可参考帮助:
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之类的工具还能输出成框图。