前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >让Python代码运行更快的方式

让Python代码运行更快的方式

作者头像
AI科技大本营
发布于 2019-05-28 12:03:36
发布于 2019-05-28 12:03:36
1.1K0
举报

转载自 CSDN(ID:CSDNnews)

Python因其强大、灵活且易于使用等特性,而赢得了声誉。这些优点使其在各种各样的应用程序、工作流程和领域中得到了广泛应用。但是就语言的设计,也就是它天然的解释能力还有它的运行时的动态性而言,Python总是比C或C ++这样的机器本地语言慢一个数量级。

多年来,开发人员已经为Python的速度限制提出了各种变通方法。例如你可以在C中编写性能密集型任务并使用Python封装它,许多机器学习库正是这样做的。或者你可以使用Cython,这个项目可以将Python种加上运行时类型信息以便编译为C,通过这种方式来允许你使用Python代码。

但变通办法从来都不是理想的。如果我们能够按原样使用现有的Python程序并以更快的速度运行它,那不是很好吗?这正是PyPy允许你做的事情。

PyPy与CPython

PyPy是Python解释器CPython的直接替代品。CPython将Python编译为中间字节码然后由虚拟机解释,而PyPy使用实时(JIT)编译将Python代码转换为本地机器的汇编语言。

根据正在执行的任务,性能提升可能会非常显着。平均而言,PyPy将Python加速了大约7.6倍,一些任务加速了50倍或更多。CPython解释器根本不会执行与PyPy一样的优化方式,并且可能永远不会,因为这不是它的设计目标之一。

最好的部分是开发人员需要很少甚至不需要努力来解锁PyPy提供的收益。只需将CPython替换为PyPy,并且大部分都已完成。下面讨论了一些例外,但是PyPy的目标是运行现有的,并且未经修改的Python代码并为其提供自动化的速度提升。

PyPy目前通过项目的不同版本支持Python 2和Python 3。换句话说,你需要下载不同版本的PyPy,具体取决于你运行的Python版本。 PyPy的Python 2分支已经存在了很长时间,但到目前为止,python 3版本的速度已经提高了很多。PyPy目前支持Python 3.5(发布版本)和Python 3.6(beta版本)。

除了支持所有核心Python语言外,PyPy还可以与Python生态系统中的绝大多数工具配合使用,例如用于打包的pip或用于虚拟环境的virtualenv。大多数Python软件包,即使是那些带有C模块的软件包,都会按照原样运行。当然,也存在一些限制,我们将在下面介绍一些限制。

PyPy如何工作

PyPy使用其他即时编译器中的动态语言优化技术。它分析运行的Python程序,以确定在程序中创建和使用对象时的类型信息,然后使用该类型信息作为指导来加快速度。例如,如果Python函数仅使用一种或两种不同的对象类型,PyPy会生成机器代码来处理这些特定情况。

PyPy的优化是在运行时自动处理,因此你通常不需要调整其性能。高级用户可能会尝试使用PyPy的命令行选项来为特殊情况生成更快的代码,但这种情况通常很少需要。

PyPy也脱离了CPython处理一些内部函数的方式,但它同时试图保留兼容的行为。例如PyPy处理垃圾回收的方式与CPython不同。并非所有对象一旦超出范围就立即回收,所以在PyPy下运行的Python程序可能比在CPython下运行时显示占用更大的内存。但你仍然可以使用通过gc模块公开的Python高级垃圾回收控件,例如gc.enable(),gc.disable()和gc.collect()等等。

如果你想在运行时获得有关PyPy的JIT(实时)行为的信息,PyPy包含一个模块pypyjit,它向你的Python应用程序公开了许多JIT关联信息。如果你的某个功能或模块在JIT上表现不佳,那么pypyjit可以让你获得有关它的详细统计信息。

另一个特定于PyPy的模块,__pypy__暴露了PyPy特有的其他功能,因此对于编写利用这些功能的应用程序非常有用。由于Python的运行的动态性,有可能构建在PyPy存在时使用这些功能的Python应用程序,而在不存在时忽略它们。

PyPy的限制

可能看PyPy起来像魔法一样神奇,但其实它并不神奇。 PyPy同样具有某些限制,可以削弱或消除某些程序的有效性。唉,PyPy不是CPython运行时的完全的通用替代品。

PyPy最适合纯Python的应用程序

PyPy在“纯”Python应用程序中表现最佳,换句话说也就是用Python编写的没有夹杂其他语言的应用程序中表现最佳。由于PyPy模仿CPython的本机二进制接口的方式,与C库(如NumPy)接口的Python包也没有那么出类拔萃了。

PyPy的开发人员已经解决了这个问题,并使PyPy与大多数依赖于C扩展的Python包更加兼容。例如Numpy现在与PyPy兼容的非常好。但是,如果你希望与C的扩展最大程度地兼容,请使用CPython。

PyPy适用于运行时间较长的程序

PyPy优化Python程序的一个副作用是,运行时间较长的程序通过PyPy的优化获益最多。程序运行的时间越长,PyPy可以收集的运行时类型信息就越多,它可以进行的优化就越多。一劳永逸的Python脚本不会从这种事情中受益。例如受益的Python应用程序通常具有长时间循环运行的行为,或者在Web框架的后台中连续运行。

PyPy没有预编译

PyPy编译Python代码,但它不是Python代码的编译器。由于PyPy执行其优化的方式和Python的固有动态特点,因此无法将生成的JITted代码作为独立二进制文件发出并重新使用它。每次运行都必须编译每个程序。如果你想将Python编译成可以作为独立应用程序运行的更快的代码,那么还是请使用Cython、Numba或当前实验性的Nuitka项目。

原文:

https://www.infoworld.com/article/3385127/what-is-pypy-faster-python-without-pain.html

(*本文为 AI科技大本营转载文章,转载请联系原作者)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让Python代码更快运行的 5 种方法
不论什么语言,我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之 处,那就是执行效率和性能不够亮。尽管Python从未如C和Java一般快速,但是不少Python项目都处于开发语言领先位置。 Python 很简单易用,但大多数人使用Python都知道在处理密集型cpu工作时,它的数量级依然低于C、Java和JavaScript。但不少第三方不愿赘述 Python的优点,而是决定自内而外提高其性能。如果你想让Python在同一硬件
小小科
2018/05/03
1.4K0
为什么Python这么慢?
答案在很大程度上取决于您正在运行的应用程序的类型。没有一个基准测试是完美的,但是计算机语言基准测试游戏是一个很好的起点。
HuangWeiAI
2019/11/25
1.5K0
为什么Python这么慢?
Python代码执行模型
在python程序运行时,python首先会编译生成“字节码”,之后将字节码发送到所谓的“虚拟机”上执行。
zy010101
2021/05/18
7660
热度碾压 Java、C#、C++的 Python,为什么速度那么慢?
眼下 Python 异常火爆,不论是 DevOps、数据科学、Web 开发还是安全领域,都在用 Python——但是它在速度上却没有任何优势。
CDA数据分析师
2018/08/14
2.2K0
热度碾压 Java、C#、C++的 Python,为什么速度那么慢?
为什么Python这么慢?
Python语言近年来人气爆棚。它广泛应用于网络开发运营,数据科学,网络开发,以及网络安全问题中。
大数据文摘
2018/08/21
1.1K0
为什么Python这么慢?
为什么 Python 这么慢?
对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?
sergiojune
2018/12/13
1.5K0
4 个快速的 Python 编译器 f
Python 其实是一种相当快的语言,但它并不像编译型语言那么快。 这是因为官方实现的 CPython 解释执行的,更准确地说,是 Python 代码被编译为字节码,然后进行解释。这对学习是很有好处的,因为可以在 Python REPL 中运行代码并立即查看结果,而不必编译和执行。 但是由于 Python 程序并没有那么快,开发人员多年来创建了几个 Python 的编译器,包括 IronPython 和 Jython。
py3study
2020/01/02
1.7K0
Python之父:明年让Python快2倍
5月中旬刚刚结束的Pycon US 2021上,Python之父Guido van Rossum提出要在未来四年内将CPython速度提升5倍。
量子位
2021/06/17
5580
狂揽两千星,速度百倍提升,高性能Python编译器Codon开源
机器之心报道 机器之心编辑部 这个高性能 Python 编译器具有支持 Python 众多语法、完美互通其他框架等优点。 众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。 编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。 项目地
机器之心
2023/03/29
4450
狂揽两千星,速度百倍提升,高性能Python编译器Codon开源
各种 Python 实现的简单介绍与比较
来源:Python开发者 ID:PythonCoder 当谈到Python时,一般指的是CPython。但Python实际上是一门语言规范,只是定义了Python这门语言应该具备哪些语言要素,应当能完成什么样的任务。这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++、Java、C#、JavaScript,甚至使用Python自己实现。这篇文章就是简要介绍并比较不同的Python实现,并且今后还会不断的扩充。 CPython CPython是标准Python,也是其他Python编译器的参考实现
小小科
2018/06/20
9950
让 Python 变快的 5个方案
Python 的运行速度确实没有 C 或者 Java 快,但是有一些项目正在努力让 Python 变得更快。
Python进击者
2021/03/09
2.9K0
让 Python 变快的 5个方案
关于 Python 3.13 你所需要知道的几点
自20世纪80年代末,Guido Van Rossum在荷兰阿姆斯特丹东部的一个科技园区开始开发Python编程语言,它最初被设计为一种单线程的解释型语言。这到底是什么意思呢?
数据科学工厂
2024/12/30
800
关于 Python 3.13 你所需要知道的几点
【说站】python代码提速有哪些方法
在开发者当中,Python是最常用的编程语言之一,但是它有一些限制。举例来说,对于某些应用程序,其速度可能比其他语言慢100倍。因此,在Python的速度成为用户瓶颈之后,很多公司都会用其他语言重写自己的应用程序。
很酷的站长
2022/11/23
4580
【说站】python代码提速有哪些方法
pypy真的能让python比c还快?
最近 “pypy为什么能让python比c还快” 刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。
州的先生
2021/06/21
7220
pypy真的能让python比c还快?
提升Python运行速度的必备工具清单
大家好呀!今天我要给大家分享一下可以让Python变得更快的工具清单。可能有些小伙伴一直在为Python的执行速度苦恼,今天就给大家分享一些实用的工具,可能能够帮到你哦!
华科云商小彭
2023/08/10
3080
提升Python运行速度的必备工具清单
常见 Python 代码优化技巧
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。
昱良
2019/08/06
1.2K0
Python这几个库,快到飞起!
作为Python老司机来说,这样的库不要太多了,从地图绘制到算法优化、从调试工具到代码分析,python的生态里有大量的库资源可以给Pythoner使用
行哥玩Python
2021/12/09
5350
Python这几个库,快到飞起!
Python 3.13:性能和规模的新突破
Python 3.13 引入了实验性的自由线程模式和 JIT 编译器,为提高性能和多核利用率铺平了道路,同时增强了交互体验。
云云众生s
2024/10/09
1.1K0
Python 为什么这么慢?
大家好,我是猫哥。今天分享一篇文章,讨论了拖慢 Python 整体性能的三大原因。在开始正文之前,需要说明一下(免得有人误以为 Python 慢就不值得使用):性能很关键,但并不总是决定因素,语言的选择是系统性的问题,需要多方考虑。
Python猫
2019/06/05
2.2K0
Python 为什么这么慢?
全网最实用 Python 面试题大全(花费了整整 3 天时间整理出来的)
花费了整整3天时间整理出来的全网最实用Python面试题大全,一共30道题目+答案的纯干货,如此的辛勤整理,希望大家多多支持,建议点赞+收藏!
Python小二
2020/09/24
9450
全网最实用 Python 面试题大全(花费了整整 3 天时间整理出来的)
相关推荐
让Python代码更快运行的 5 种方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文