Python运行速度慢?是你孤陋寡闻了?5个优化方法提速百分百
北漂编程2021-04-23 21:47
速度慢
Python之因此速度慢,重点是因为动态性和多功能性。
Python 的运行过程是虚拟机读入 Python 代码(文本),词法分析,编译成虚拟机认识的 opcode,而后虚拟机解释 opcode 执行。但这并不是最重点的原由,Python import 之后会缓存编译后的 opcode,因此读入、词法分析和编译并无占用太多的时间。
那样真正的慢的是哪一步分呢?便是后面的虚拟机解释 opcode 执行的部分。前期的编译是将 Python 代码编译成解释器能够理解的中间代码,解释器再将中间代码翻译成 CPU 能够理解的指令。相比于 AOT(提前编译型语言,例如C)直接编译成设备码,肯定是慢的。
下面是五种已有的方法,帮忙你加强Python的性能。
Cython
是Python的C语言扩展,cPython是一门单独的语言,专门用来写在Python里面的import用的扩展库。CPython跟Python语法基本一致,而CPython有专门的编译器。
据述,Cython供给了有些特性来让代码更有效,例如变量类型化,这本质上是C需求的。有些科学计算的包,如scikit-learn依赖Cython的有些特性来保持操作简洁快速。
Pyston
Pyston,由Dropbox帮助,运用LLVM编译器架构来加速Python,一样的它亦运用了适时编译。相比于PyPy,Pyston还处在初期周期,它只支持Python的部分特性。Pyston把工作分成两个部分,一部分是语言的核心特性,另一部分是把性能提高到可接受的程度。Pyston距离能够在生产环境运用还有一段距离
Nuitka
是一个Python的替代品,它能够将Python代码转换为C++代码,而后编译为可执行文件,并且经过调用Python的API的方式实现从解析语言到编译语言的转换,在转换到C++的过程中直接运用python的解释器,能够保准100%的语法兼容。
Numba
Numba结合了上面几个项目的想法。学习了Cython,Numba亦采用了部分加速的策略,只加速CPU密集型的任务;同期它又学习了PyPy和Pyston,经过LLVM运行Python。你能够用一个装饰器指定你要用Numba编译的函数,Numba继承Numpy来加速函数的执行,Numba不做适时编译,它的代码是预先编译的。
PyPy
在选取CPython的简易替代语言时,pypy无疑时最佳之选,与现有Python代码保持高度兼容性,pypy亦是默认程序运行时的一个很好选取。PyPy运用了Just-in-Time即时编译器,动态编译器与静态编译器区别,利用程序运行的过程的数据进行优化。
PyPy运用适时编译来加速Python,这项技术Google亦在运用,Google在V8引擎中运用它加速Javascript。近期的版本PyPy2.5增多了有些提高性能的特性,其中有一项很受欢迎,它集成为了Numpy,Numpy之前亦始终被用来加速Python的运行。
结语
Python之父说:大部分觉得Python慢的应用都是无正确地运用Python。针对CPU密集型的任务有多种办法来提升性能--运用Numpy来做计算,调用外边C代码,以及尽可能避免GIL锁。因为GIL锁日前还没法被替代,
彩蛋!!!
必须下面的资料的,还有更加多课件资源的,请私信我“666”领取!!!
私信我还有更加多惊喜哦!!!
|