PyPy为什么能让Python比C还快?一文了解内在机制
作者|力元、馨月
来源|机器之心
「如果想让代码运行得更快,您应该使用 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还快?一文了解内在机制相关推荐
- 【Python】图解NumPy:常用函数的内在机制
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 选自Medium,作者:Lev Maximov 机器之心编译 支持 ...
- 用 PyPy 让你的 Python 代码运行得更快!
Python是开发人员中最常用的编程语言之一,但它有一定的局限性.例如,对于某些应用程序而言,它的运行速度可能比其它语言低100倍.这就是为什么当Python的运行速度成为用户瓶颈后,许多公司会用另一 ...
- cpython是什么_CPython是什么?PyPy是什么?Python和这两个东西有什么关系?
展开全部 CPython:是用32313133353236313431303231363533e59b9ee7ad9431333363396465C语言实现Pyhon,是目前应用最广泛的解释器.最新的 ...
- 为何python不好找工作-学完Python,为什么还找不到工作?现实很残酷!
Python掀起了一股外行人的学习热潮,简单易学,又无所不能.信誓旦旦报了培训班,亦或是购买了课程自学,一段时间后自认为掌握了Python,出去找工作却碰了一鼻子灰.到底是怎么一回事呢? 半路出家学弹 ...
- CPython是什么?PyPy是什么?Python和这两个东西有什么关系
python是一种编程语言.但这种语言有多种实现,而且与其他语言不同,python并没有一个专门的机构负责实现,而是由多个社区来实现. 其中使用c语言开发的叫做python,在于别的语言开发的pyth ...
- 三十岁开始学习 Python 编程,还来得及吗?
程序员界流行一句话:人生苦短,请用 Python.随着 Python 成为网红语言之后,不少程序员想多学这一门语言好傍身.甚至有些 29,30 岁的程序员开始考虑要转行做 Python. 30 岁开始 ...
- python断网还能用吗_python 断网
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 环境:windows.python3.6解决办法:1. 主机a(虚拟环境激活)p ...
- 一个让Python代码运行更快的最佳方式!
作者 | Serdar Yegulalp 译者 | 姜松浩,责编 | 屠敏 转载自 CSDN(ID:CSDNnews) Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样 ...
- 让 Python 代码运行更快的最佳方式!
Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样的应用程序.工作流程和领域中得到了广泛应用.但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Pyth ...
最新文章
- [MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题
- laydate.render报错:日期格式不合法
- 我的世界一个程序导致JAVA,Java地位无可动摇的12个原因
- 包含命名空间的xml反序列化 (1.7环境下)
- python新手图解_Python完全新手教程
- 由电梯紧急按钮,谈用户体验
- socket创建失败_python3从零学习-5.8.1、socket—底层网络接口
- 微信小程序服务器配置https站点
- 马云正式辞职,那么天才郭盛华到底在追求什么呢?
- 向Docker告别的时候到了
- 网站安全检测及安全工具
- cassandra多个数据中心实现异地容灾
- 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
- SAP中记账汇率和预算汇率的应用配置分析
- unity 关于搜索
- iOS手机端日志打印显示工具
- SPA与MPA之间的区别
- Linux桌面虚拟化技术--KVM
- hi3559av100的基本介绍
- 【web前端】html+js实现流程进度展示条
热门文章
- Educational Codeforces Round 64(Unrated for Div.1+Div. 2)
- 【转】golang-defer坑的本质
- HDU 2516 取石子游戏 斐波纳契博弈
- 保留关键字 (Transact-SQL) user 也是,哎
- C#Windows 服务制作安装删除. 用户注销后,程序继续运行 (转载)
- HOWTO:如何在代码中获取安装包目标机上的Windows Installer(MSI)版本
- C#开发XML WebService接口(SOAP)
- (转)DevExpress 汉化(简单、实用、快速)
- 聊聊我对黑客技术的思考
- gets函数会读取回车吗_会做二次函数吗?用6种方法教你做二次函数(初中生不要错过)...