前言
现在用Python的人很多,并不是因为的执行速度有多快,而是因为他简练的语法和各种语法糖以及对程序员非常友好,并且它有大量的第三方库的支撑。但是正因为如此往往大家会忽略Python的一些优化。在这篇文章中我会简要的列出一些常见的Python优化。
检查出程序慢的原因
程序运行慢,肯定有某些方法存在问题,如果无法定位到问题就没法进行优化。通常这个时候我就会用到Python内置的Cprofile模块进行简单的分析定位。如果需要更准确的位子,可以转到行级分析器。通常对应用程序进行基本功能级别的检查能获得很多有用的信息。当然对单独的函数检查我们还可以用Profilehooks模块,它可以直接得到特定函数的运行速度。为你如何修复它提供有力的支撑。
缓存的使用
这个问题在别的语言中也经常碰到,在工作中我们常用的数据,不经常更新的数据,我们最好都能够用的缓存,Python也内置了缓存的工具,这样程序的返回结果时,能够做到更快。Python的本地库也提供了一个函数@function tools.lru_cache修饰器,它可以缓存最近对这个函数的N个调用。当我们缓存的值不经常发生变化,它可以直接返回你需要的数据。具体的方法使用可以查看python的官方文档。
用C语言的库文件
如果我们实现某个功能发现,有一个python的库和一个c库,最好我们优先使用c库来实现我们的功能,Python本身提供了运行其他程序库文件的功能。最常用的方法是Python的ctype库,我们可以轻松的使用它运行c语言的库文件,但是它也不是唯一选项,Cython其实是更好的方式,但是代价就是我们要学习Cython的一些用法。
把项目转为Cython
如果我们项目需要非常快的速度,那谁能比得过C语言,但是对于开发者来说用c写的代价太大,所以出现了Cython,让python和c语言混合编码 ,这样可以能用c的地方就用c,虽然有些代价,但是如果对项目的性能真的有要求确实是可以用它来提升项目的性能。
并行处理业务
传统的python或者Cpython的程序都是一次只执行一个线程,这样效率肯定很慢,现在cpu都是多核了,不用显得有点浪费,Python也提供了相应的多处理模块,来同时在多核上同时处理业务,数据可以通过共享内存或者redis服务器来在进程之间传递一些数据,这样看起来开销不小,但是相对于能使用并行的性能还是值得的。
使用NumPy
如果项目中需要使用基于矩阵或者基于阵列的数学计算,最好不要使用Python来进行,推荐使用Numpy。Numpy是c语言编写的,它能够提供比Python更新的阵列处理,它还存储了比Python内置数据结构更高效的数字数据。在机器学习领域几乎都是用Numpy来进行计算的。
使用Python3
如果你使用的使Python2x,并且没有一个必须使用它的理由,那你可以直接升级到python3来工作了。除了Python3是Python的未来以外,Python3在性能上有了质的提升,而且还自带了很多Python2x上无法使用的特性,例如,Python3.5通过使异步和等待关键字成为语言语法的一部分,减少了异步编程的难度,Python3.2为Global解释器Lock带来了一次重大升级,极大地改进了Python处理多个线程的方式。等等优势我就不一一列举了。大家有兴趣可以直接去看官网文档,或者去各大中文社区寻找更详细的资料。
领取专属 10元无门槛券
私享最新 技术干货