作者|力元、馨月

来源|机器之心

「如果想让代码运行得更快,您应该使用 PyPy。」 - Python 之父 Guido van Rossum

对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Python 是能够实现这一目标的出色语言,它能够让人们专注于想法本身,而不必过度为代码格式等无聊的事情困扰。

但是,Python 有一个致命的缺点:速度比 C、C ++ 等语言慢很多。那么,构建一个 Python 原型测试想法之后,如何将其转变为快速且高性能的工具?通常来说,人们还要再进行一步工作:将 Python 代码手动转换为 C 语言的代码。但如果 Python 原型本身就可以运行得很快,那么转换代码的时间就可以做一些更有意义的事情。

而 PyPy,恰好可以解决这一问题。它能够让 Python 代码运行得比 C 还快。

import time
from termcolor import coloredstart = time.time()
number = 0
for i in range(100000000):number += iprint(colored("FINISHED", "green"))
print(f"Ellapsed time: {time.time() - start} s")

为了证明 PyPy 的速度,使用默认的 Python 解释器和 PyPy 运行上述代码,执行一个从整数 0 加到 100,000,000 的循环, 然后打印出运行时间。运行结果如下:

运行时间 Python vs PyPy

这不是学术意义上的评估,但该结果是令人惊叹的。与大约需要 10 秒钟的默认 Python 解释器相比,PyPy 仅用 0.22 秒就完成了执行。而且无需进行任何更改就可以直接将 Python 代码放到 PyPy 上。而同一台计算机上,等效的 C 语言实现需要 0.32 秒,PyPy 甚至击败了最快的 C 语言。

为什么 PyPy 这么快?

尽管代码完全相同,但代码的执行方式却大不相同。PyPy 提升速度的秘诀是「即时编译( just-in-time compilation)」,即 JIT 编译。

提前编译 

C、C ++、Swift、Haskell、Rust 等编程语言通常是提前编译(AOT 编译)的。这意味着用这些语言编写代码之后,编译器会将源代码转换成特定计算机架构可读的机器码。也就是说在执行程序时,执行的并不是原始源代码,而是机器码。

提前编译把源代码转化为机器代码

解释语言 

与 C 语言等上述语言不同,Python、JavaScript、PHP 等语言采用另一种方法——解释语言。与将源代码转换为机器码相比,解释的过程中源代码是保持不变的。每次运行程序时,解释器都会逐行查看代码并运行。例如,每个 Web 浏览器都内置了 JavaScript 解释器。

解释器逐行运行程序

即时编译

PyPy 是利用即时编译来执行 Python 代码的。即 PyPy 不同于解释器,它并不会逐行运行代码,而是在执行程序前先将部分代码编译成机器码。

JIT 编译综合了提前编译和解释

如上图所示,而 PyPy 使用的 JIT 编译是解释和提前编译的结合,可以利用提前编译来提高性能,并提高解释型语言的灵活性和跨平台可用性。

原文链接:https://towardsdatascience.com/run-your-python-code-as-fast-as-c-4ae49935a826

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

PyPy为什么能让Python比C还快?一文了解内在机制相关推荐

  1. 【Python】图解NumPy:常用函数的内在机制

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 选自Medium,作者:Lev Maximov 机器之心编译 支持 ...

  2. 用 PyPy 让你的 Python 代码运行得更快!

    Python是开发人员中最常用的编程语言之一,但它有一定的局限性.例如,对于某些应用程序而言,它的运行速度可能比其它语言低100倍.这就是为什么当Python的运行速度成为用户瓶颈后,许多公司会用另一 ...

  3. cpython是什么_CPython是什么?PyPy是什么?Python和这两个东西有什么关系?

    展开全部 CPython:是用32313133353236313431303231363533e59b9ee7ad9431333363396465C语言实现Pyhon,是目前应用最广泛的解释器.最新的 ...

  4. 为何python不好找工作-学完Python,为什么还找不到工作?现实很残酷!

    Python掀起了一股外行人的学习热潮,简单易学,又无所不能.信誓旦旦报了培训班,亦或是购买了课程自学,一段时间后自认为掌握了Python,出去找工作却碰了一鼻子灰.到底是怎么一回事呢? 半路出家学弹 ...

  5. CPython是什么?PyPy是什么?Python和这两个东西有什么关系

    python是一种编程语言.但这种语言有多种实现,而且与其他语言不同,python并没有一个专门的机构负责实现,而是由多个社区来实现. 其中使用c语言开发的叫做python,在于别的语言开发的pyth ...

  6. 三十岁开始学习 Python 编程,还来得及吗?

    程序员界流行一句话:人生苦短,请用 Python.随着 Python 成为网红语言之后,不少程序员想多学这一门语言好傍身.甚至有些 29,30 岁的程序员开始考虑要转行做 Python. 30 岁开始 ...

  7. python断网还能用吗_python 断网

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 环境:windows.python3.6解决办法:1. 主机a(虚拟环境激活)p ...

  8. 一个让Python代码运行更快的最佳方式!

    作者 | Serdar Yegulalp 译者 | 姜松浩,责编 | 屠敏 转载自 CSDN(ID:CSDNnews) Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样 ...

  9. 让 Python 代码运行更快的最佳方式!

    Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样的应用程序.工作流程和领域中得到了广泛应用.但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Pyth ...

最新文章

  1. [MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题
  2. laydate.render报错:日期格式不合法
  3. 我的世界一个程序导致JAVA,Java地位无可动摇的12个原因
  4. 包含命名空间的xml反序列化 (1.7环境下)
  5. python新手图解_Python完全新手教程
  6. 由电梯紧急按钮,谈用户体验
  7. socket创建失败_python3从零学习-5.8.1、socket—底层网络接口
  8. 微信小程序服务器配置https站点
  9. 马云正式辞职,那么天才郭盛华到底在追求什么呢?
  10. 向Docker告别的时候到了
  11. 网站安全检测及安全工具
  12. cassandra多个数据中心实现异地容灾
  13. 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
  14. SAP中记账汇率和预算汇率的应用配置分析
  15. unity 关于搜索
  16. iOS手机端日志打印显示工具
  17. SPA与MPA之间的区别
  18. Linux桌面虚拟化技术--KVM
  19. hi3559av100的基本介绍
  20. 【web前端】html+js实现流程进度展示条

热门文章

  1. Educational Codeforces Round 64(Unrated for Div.1+Div. 2)
  2. 【转】golang-defer坑的本质
  3. HDU 2516 取石子游戏 斐波纳契博弈
  4. 保留关键字 (Transact-SQL) user 也是,哎
  5. C#Windows 服务制作安装删除. 用户注销后,程序继续运行 (转载)
  6. HOWTO:如何在代码中获取安装包目标机上的Windows Installer(MSI)版本
  7. C#开发XML WebService接口(SOAP)
  8. (转)DevExpress 汉化(简单、实用、快速)
  9. 聊聊我对黑客技术的思考
  10. gets函数会读取回车吗_会做二次函数吗?用6种方法教你做二次函数(初中生不要错过)...