Python性能优化

王 茂南 2019年6月17日07:32:38
评论
1153字阅读3分50秒
摘要这一篇会给出一些加快Python运行速度的方式。但是需要注意的是,”我们应该忘记小的效率,过早的优化是一切罪恶的根源,有 97% 的案例如此。简单来说就是选择恰当的时机进行优化.”, 先不要太注重效率的优化。

文章目录(Table of Contents)

介绍

开始之前,先放一句话:

我们应该忘记小的效率,过早的优化是一切罪恶的根源,有 97% 的案例如此。简单来说就是选择恰当的时机进行优化。

下面的所有内容基于上面这句话!!!

关于性能优化会有很多的工具,我就把一些常用的链接贴在下面,详细说一下我自己使用过的。

性能分析

参考链接 : Python 常用的性能分析工具

cProfile

参考链接:使用cProfile分析Python程序性能

性能优化

numba

例子(详细的例子看文档):

下面这个例子是计算圆周率的例子,我们简单比较一下使用numba和不使用numba之后两者速度上的差异。

  1. import time
  2. import random
  3. from numba import jit, autojit, int32
  4. def no_monte_carlo_pi(nsamples):
  5.     acc = 0
  6.     for i in range(nsamples):
  7.         x = random.random()
  8.         y = random.random()
  9.         if (x ** 2 + y ** 2) < 1.0:
  10.             acc += 1
  11.     return 4.0 * acc / nsamples
  12. @jit(nopython=True)
  13. def monte_carlo_pi(nsamples):
  14.     acc = 0
  15.     for i in range(nsamples):
  16.         x = random.random()
  17.         y = random.random()
  18.         if (x ** 2 + y ** 2) < 1.0:
  19.             acc += 1
  20.     return 4.0 * acc / nsamples
  21. if __name__ == '__main__':
  22.     t1 = time.time()
  23.     print(monte_carlo_pi(1000000))
  24.     t2 = time.time()
  25.     print('Using Numba',t2-t1)
  26.     # ------Without Numba
  27.     t1 = time.time()
  28.     print(no_monte_carlo_pi(1000000))
  29.     t2 = time.time()
  30.     print('Without Numba',t2-t1)
Python性能优化

可以看到,整体的时间还是下降很多的。关于更多的使用方式,查看下面官网给出的说明。

numba文档 : https://numba.pydata.org/

Cython

参考链接 : Cython的简单使用

其他

一些资料的链接:Python的GIL是什么鬼,多线程性能究竟如何

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2019年6月17日07:32:38
  • 转载请务必保留本文链接:https://mathpretty.com/9561.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: