快亦有道!让 Python 变快的 5个方案

重磅干货,第一时间送达

译者:诗书塞外

原文:http://dwz.date/duAA

Python的运行速度确实没有C或者Java快,但是有一些项目正在努力让Python变得更快。

Python代码简洁干净,但是大家都知道Python运行起来相对较慢 --- 在CPU密集型的任务上慢于C、Java和Javascript(但是大多数服务都不是CPU密集型的)--- 但是有些团队希望Python是尽善尽美的,所以他们准备从内而外地提升Python的性能。

如果你想让Python在特定硬件上运行得快一点,你至少有两个选择,每个选择都有一些弊病:

  1. 你可以创建一个Python运行时的替代品,但是最后你会发现你重写了一遍CPython。

  2. 你可以重写现存的部分代码来利用一些性能优化的特性,缺点是程序员需要做更多的工作。

下面是五种已有的方案,帮助你提高Python的性能。

1. PyPy

在CPython的替代品中,PyPy是最显眼的那一个(比如Quora就在生产环境中使用它)。它也最有机会成为默认解释器,它和现存Python代码高度兼容。

PyPy使用适时编译来加速Python,这项技术Google也在使用,Google在V8引擎中使用它加速Javascript。最近的版本PyPy2.5增加了一些提升性能的特性,其中有一项很受欢迎,它集成了Numpy,Numpy之前也一直被用来加速Python的运行。

使用Python3的代码需要对应地使用PyPy3。PyPy目前只支持到Python3.2.5,对Python3.3的支持正在进行中。

2. Pyston

Pyston,由Dropbox资助,使用LLVM编译器架构来加速Python,同样的它也使用了适时编译。相比于PyPy,Pyston还处于早期阶段,它只支持Python的部分特性。Pyston把工作分成两个部分,一部分是语言的核心特性,另一部分是把性能提升到可接受的程度。Pyston距离可以在生产环境使用还有一段距离。

3. Nuitka

除了替换Python运行时,有些团队尝试将Python代码转换为能够在本地高效运行的其他语言的代码。其中著名的项目是Nuitka--把Python代码转换为C++代码--虽然运行时还是依赖Python运行时。这样限制了它的可移植性,不过性能提升是可观的。长期规划中,Nuitka还准备让C语言能够调用Nuitka编译的Python代码,这样性能提升将更加明显。

4. Cython

Cython(Python的C语言扩展)是Python的超集,它能把Python代码编译成C代码,并与C和C++进行交互。它可以作为Python项目的扩展使用(重新性能要求高的部分),或者单独使用,不涉及传统的Python代码。缺点是你写的不是Python,所以需要手动迁移,缺乏可移植性。

据说,Cython提供了一些特性来让代码更高效,比如变量类型化,这本质上是C要求的。一些科学计算的包,如scikit-learn依赖Cython的一些特性来保持操作简洁快速。

5. Numba

Numba结合了上面几个项目的想法。学习了Cython,Numba也采用了部分加速的策略,只加速CPU密集型的任务;同时它又学习了PyPy和Pyston,通过LLVM运行Python。你可以用一个装饰器指定你要用Numba编译的函数,Numba继承Numpy来加速函数的执行,Numba不做适时编译,它的代码是预先编译的。

Python之父说:大部分觉得Python慢的应用都是没有正确地使用Python。对于CPU密集型的任务有多种方法来提升性能--使用Numpy来做计算,调用外部C代码,以及尽量避免GIL锁。由于GIL锁目前还无法被替代,所以有很多项目开始尝试一些短期可行的替代方案,当然这些方案也可能转变为长期的可选项。

推荐阅读国产小众浏览器因屏蔽视频广告,被索赔100万(后续)年轻人“不讲武德”:因看黄片上瘾,把网站和786名女主播起诉了中国联通官网被发现含木马脚本,可向用户推广色情APP

张一鸣:每个逆袭的年轻人,都具备的底层能力

关于程序员大白

程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!

(0)

相关推荐

  • 神奇的一行代码,让 Python 轻松跑赢 C

    众所周知,Python 是动态语言,有全局解释器锁,比其他静态语言要慢,也正是这个原因,你也许会转向其他语言如 Java.C++,不过先等等,今天分享一个可以让 Python 比 C++ 还要快的技术 ...

  • 图解|为什么 Python 多线程无法利用多核

    (给Python开发者加星标,提升Python技能) 来源:后端技术指南针 1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter ...

  • Python代码运行慢怎么办?这五种方法要谨记!

    对于Python很多人还是比较了解的,虽然说Python有很多优势但同样具有劣势,Python最大的劣势就是运行效率慢,那么如何提高Python代码运行速度呢?这五种方法很管用. 1.PyPy:在选择 ...

  • Numba是什么?如何使用?

    Numba,一款可以让Python函数编译为机器代码的JIT编译器,它可以加速Python运行,想必很多人对它都十分感兴趣,接下来我们就来看看吧. Numba是什么? Numba是一个库,可以在运行时 ...

  • 一份可以令 Python 变快的工具清单

    来源:linuxer小橡皮 这篇文章会提供一些优化代码的工具.会让代码变得更简洁,或者更迅速. 当然这些并不能代替算法设计,但是还是能让Python加速很多倍. 其实前面讲算法的文章,也有提到过.比如 ...

  • 超级快充解谜:手机品牌冲击100W快充,真让充电变快很多吗?

    在手机充电上,最让你深入人心的广告是什么?也许就是当初沈义人创造的那句"充电5分钟,通话2小时",简单几个字就命中了很多人的痛点,也让OPPO核心卖点被很多人给记住.其实不光OPP ...

  • 用了快4年的手机,现在反应很慢,有什么办法变快吗?

    用了快4年的手机,现在反应很慢,有什么办法变快吗?大家都知道,不管是安卓手机,还是苹果手机,使用的时间久了,就会变慢变卡顿.手机之所以会变慢,原因是多方面的,我们只需要对症下药,就可以解决手机卡顿的问 ...

  • 五一假日来临, 来几道快手营养家常菜, 快收藏了吧

    酿油豆腐 做法 1.猪肉去皮切小丁,油炸虾米切小丁,姜切末,一起剁成肉馅 2.加入盐.生抽.胡椒粉.花椒粉.鸡蛋往一个方向搅拌均匀,最后加入葱花搅匀 3.取一个油豆腐,用筷子戳个洞,随便转一下,让里面 ...

  • Python 最快Web框架

    点击关注

  • 瑜伽开肩很重要,这几种体式要多练,打好基础,进步才能变快

    为什么许多人都在说练瑜伽只开髋不开肩等于没有练呢? 这是由于瑜伽练习强调的是身体的协调性以及呼吸法互相配合,但是许多练习者最初会把注意力侧重于开髋的练习上,而习惯性地忽略了开肩的重要性. 瑜伽开肩其实 ...

  • 《解决师》剧情进入尾声节奏开始变快,最后十集还有很多内容?

    记得在<解决师>刚开播的时候,大家对于这部剧的评价不是很高,那会还在想,会不会是<金宵大厦>实在太火了,所以把这部<解决师>衬托得有些一般.不过转眼间,TVB的这部 ...

  • 推荐几道家常菜,美味可口快来试试吧

    认真生活.认真做菜,每一个出自自己动手的美味都是一种鼓励和自豪! 西芹素炒千张 食材:西芹.千张.胡萝卜.植物油.盐.鸡粉.蒜.生抽 做法 1.西芹洗净,切段.千张冲洗一下,切宽条,用热水焯一下,沥净 ...

  • 净利润断层选股变快了!

    0.聊一聊 昨天有位朋友留言,讲了一个简单的方法,多一步操作,应该能提高一下净利润断层公式选股的速度. 主要步骤如下: 1.新建[高开缺口]选股公式,选出当天有高开缺口或涨幅大于8%的股票,放在一个自 ...