文章目录(Table of Contents)
介绍
开始之前,先放一句话:
我们应该忘记小的效率,过早的优化是一切罪恶的根源,有 97% 的案例如此。简单来说就是选择恰当的时机进行优化。
下面的所有内容基于上面这句话!!!
关于性能优化会有很多的工具,我就把一些常用的链接贴在下面,详细说一下我自己使用过的。
性能分析
参考链接 : Python 常用的性能分析工具
cProfile
性能优化
numba
例子(详细的例子看文档):
下面这个例子是计算圆周率的例子,我们简单比较一下使用numba和不使用numba之后两者速度上的差异。
- import time
- import random
- from numba import jit, autojit, int32
- def no_monte_carlo_pi(nsamples):
- acc = 0
- for i in range(nsamples):
- x = random.random()
- y = random.random()
- if (x ** 2 + y ** 2) < 1.0:
- acc += 1
- return 4.0 * acc / nsamples
- @jit(nopython=True)
- def monte_carlo_pi(nsamples):
- acc = 0
- for i in range(nsamples):
- x = random.random()
- y = random.random()
- if (x ** 2 + y ** 2) < 1.0:
- acc += 1
- return 4.0 * acc / nsamples
- if __name__ == '__main__':
- t1 = time.time()
- print(monte_carlo_pi(1000000))
- t2 = time.time()
- print('Using Numba',t2-t1)
- # ------Without Numba
- t1 = time.time()
- print(no_monte_carlo_pi(1000000))
- t2 = time.time()
- print('Without Numba',t2-t1)
可以看到,整体的时间还是下降很多的。关于更多的使用方式,查看下面官网给出的说明。
numba文档 : https://numba.pydata.org/
Cython
参考链接 : Cython的简单使用
其他
一些资料的链接:Python的GIL是什么鬼,多线程性能究竟如何
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论