在Jupyter-notebook中有几个用于计时的魔法命令%time
、%%time
、%timeit
、%%timeit
,可以非常简单的获取部分代码的运行耗时。
所有以
%
开头的方法,都是所谓的魔法命令(Magic function),也就是IPython内置的一些方法。魔法方法要区分%
和%%
,以%
开头的叫做line magic
,是专门针对一行的命令,以%%
开头的叫做cell magic
,是针对多行(一个cell)的命令。
%time
给出当前行的代码运行一次所花费的时间;
1
2
3
4
5
6a,b = 1,2
%time a,b = b,a
# output:
# CPU times: user 2 µs, sys: 1 µs, total: 3 µs
# Wall time: 5.01 µs其中:
- user:表示执行用户代码(内核外)消耗的CPU时间;
- sys:表示进程在内核中消耗的CPU时间;
所以,CPU总耗时看
total
即可,也就是uset
和sys
之和。Wall time
是最终总耗时,包括IO、排队的耗时,也就是感知到的总耗时。Wall time $<$ CPU 表明进程是计算密集型(CPU bound),利用多核处理器的并行执行优势;
Wall time $\approx$ CPU 表明进程是计算密集型,未并行执行;
Wall time $>$ CPU 表明进程是I/O密集型(I/O bound),多核并行执行优势并不明显;
%%time
给出当前cell的代码运行一次所花费的时间;
1
2
3
4
5
6
7%%time
a,b = 1,2
a,b = b,a
# output:
# CPU times: user 2 µs, sys: 1e+03 ns, total: 3 µs
# Wall time: 5.96 µs%timeit -n 1000
给出当前行的代码运行n次所花费的时间(取最快三次的平均用时);
1
2
3
4%timeit -n 10000 c = pow(2,20)
# output:
# 10000 loops, best of 3: 198 ns per loop%%timeit -n 1000
给出当前cell的代码运行n次所花费的时间(取最快三次的平均用时);
1
2
3
4
5
6
7
8%%timeit -n 10000
a,b = 1,2
c=a
a=b
b=c
# output:
# 10000 loops, best of 3: 68.5 ns per loop