python开发技巧之性能测量

一、使用 time

粗粒度的计算时间

1
2
3
4
5
6
from time import time

begin = time()
job = [x**2 for x in range(1, 100000, 3)]
end = time()
print('used {:.5} s'.format(end-begin))

细粒度的计算时间

我们将 使用 with 关键字配合一个 Timer 上下文管理器来包装想计算的代码。当代码块开始执行,它将启动计时器;当代码块结束的时候,它将停止计时器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time

class Timer(object):
def __init__(self, verbose=False):
self.verbose = verbose

def __enter__(self):
self.start = time.time()
return self

def __exit__(self, *args):
self.end = time.time()
self.secs = self.end - self.start
self.msecs = self.secs * 1000 # millisecs
if self.verbose:
print('=> elapsed time: %f ms' % self.msecs)

with Timer() as t:
job = [x**2 for x in range(1, 1000000, 3)]
print("=> elapsed time: %s s" % t.secs)

二、 使用 profiler

平均耗时计算

有时候我们需要测算代码多次运行的平均时间。

1
2
3
4
5
6
7
8
9
10
# coding:utf-8
from timeit import timeit

# 待测试的函数
def add():
return sum(range(111))

# 计算执行100000次add()消耗的时间
t = timeit('add()', setup="from __main__ import add", number=100000)
print(t)