python不想学了-嫌Python太慢但又不想学C/C++?来了解下JIT技术
什么是 JIT
Python 是门多才多艺的语言,既可以写后端,也可以做数据分析,既可以智能化运维,也可以搞渗透,既可以写爬虫,又可以做机器学习深度学习。然而,Python 的缺点也很明显,它的速度有点慢。
我们从官方网站下载到的版本,默认是采用了 CPython 解释器,它也是用得最广的解释器。以 CPython 为例,看看它的执行过程。 Pyhton 代码(.py 文件)在运行时,解释器把源代码变为一组虚拟机指令,也就是“字节码”(.pyc 文件)。这些字节码指令,是运行在 Python 虚拟机上的。因为这些是运行在虚拟机的,自然而然就比 C/C++ 等可以编译为机器码的语言慢很多。当然,影响执行效率的因素还有很多,这里就不叙述。
如果对高性能有非常迫切的需求,最好的解决方案是用 C/C++ 。不过,C/C++ 的学习难度比 Python 大很多,不是那么容易。除了换编程语言外,还有个更为容易的方法,那就是 JIT。
Just-In-Time(JIT),也就是即时编译,它为解释语言提供了一种优化。通俗地来说,就是代码在运行时,实时编译为机器码。这样,程序就可以跳过虚拟机直接在硬件上运行,执行速度大幅提高。
JIT 技术在 Java 中使用非常广泛。不过在 Python 中,以往 JIT 并不完善,听说过的人很少。
下面就介绍两种 Python 的解决方案。
Numba
Numba 是一个 开源的 JIT编译器,采用了 LLVM。它支持 Python 的原生函数和 Numpy,可以在 x86、x86_64、ppc64、armv7l、armv8l 等架构上运行,支持 Windows、MacOS 和 Linux。
Numba 的使用非常简单,无需更换 Python 的解释器。举一个简单的例子,只需要在函数上加上一个装饰器,Numba 就会自动将这些代码编译成机器码:
from numba import jit
import random
@jit(nopython=True)def monte_carlo_pi(nsamples):
acc = 0
for i in range(nsamples):
x = random.random()
y = random.random()
if (x ** 2 + y ** 2) < 1.0:
acc += 1
return 4.0 * acc / nsamples
PyPy
PyPy 是 Armin Rigo开发的动态编译器,基于 Trace 的 JIT 技术,对源码进行动态编译(不是动态解释),可以显著提高执行速度。它历史非常悠久,1.0 版本在 2007 年发布。目前支持大多数标准库,在 Python 2.7 和 3.6 上都能使用。它可以在 x86、x86_64、ARMv6、ARMv7、AArch64PowerPC 64bit、System Z 等架构上运行,支持 Linux、MacOS、Windows、OpenBSD、FreeBSD 等系统。不过,在非 x86 架构上,它只能支持 Linux。
但它有个缺点,那就是不支持支持官方的 CPython,因而无法使用 Numpy、Scipy 等常用的重要第三方库。另外,PyPy 在使用上与 CPython有些不同,具体可看 https://doc.pypy.org/en/latest/cpython_differences.html ,需要注意。
总结
Python 的 JIT 技术还不是很完善,但 Numba 已经可以满足一大部分的计算需要。至于 PyPy,个人而言不太推荐。感兴趣的不妨试试 Numba。
python不想学了-嫌Python太慢但又不想学C/C++?来了解下JIT技术相关推荐
- python 多核并行计算_手把手 | 嫌Python太慢?并行运算Process Pools三行代码给你4倍提速!...
大数据文摘作品,转载要求见文末 作者 | Adam Geitgey 编译 | 元元.Lisa.Saint.Aileen 原文链接 | https://medium.com/@ageitgey/quic ...
- 好想学python怎么玩_我用Python玩小游戏“跳一跳”,瞬间称霸了朋友圈!
你想问我怎么玩的? 很简单啊, 就一个字: 跳! 大家都在跳 为什么有的人能称霸朋友圈 有的人只有几百分呢 达妹给你整理了游戏攻略 (分普通版和进阶版哦) ▼ 游戏攻略拿高分 普通版本的高分秘籍是这样 ...
- 学python后到底能干什么-学会Python后都能做什么?网友们的回答简直不要太厉害...
如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例:有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料:还有的学习 ...
- python程序运行按什么键_太惨!学Python方法用错,直接从入门到放弃!
原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...
- 对python的认识2000字_2000字谏言,给那些想学Python的人,建议收藏后细看!
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 不识庐山真面目,只缘身在此山中. ...
- 嫌Python太慢了?让Cython带你飙车吧
很多人仅在性能方面将Python与C进行了比较,没有在快速开发方面比较,就开始抱怨Python太慢了.Python的优点在于,其开发时间非常短,你不必处理指针.内存管理等问题. 多数情况下,开发时间比 ...
- 【python零基础入门学习】Python入门,带你快速学习为什么那么多人想学 Python?
最近,网上流传一组<人工智能实验教材>的图片,照片火起来的原因是教材是为幼儿园的小朋友们设计的! [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJF1cH ...
- java串口编程程序_想成为程序员,学编程,Python、Go、Java、C++,你选什么?
很多时候,我们都不得不做出选择.就拿想成为程序员学编程这件事来说,想学一门编程语言,是选择最新潮的Python.Go,还是选择比较传统的JAVA和C++呢? 要做出选择,就得先进行比较. 其实不同编程 ...
- 想学python买什么书好-看了许多python书后!我发现学好python这三本书必看
我为什么这么热衷于python 大学学了C和java,但大学毕业后,C和java这些对我都不是很友好,在一个偶然的机会,需要用到python,从那以后我就爱上了这门语言. 从开始使用python至今4 ...
最新文章
- JAVA企业级应用TOMCAT实战
- myeclipse10.7安装git插件
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- 175 道面试必考 Go 语言题目详细解答
- Spring集成Quartz定时任务框架介绍
- 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
- mysql心得笔记_mysql总结笔记
- PHP实现Restful风格的API(转)
- python 拼音 四线格_拼音四线三格中的写法示意及书写注意事项
- [树莓派][GPIO][风扇][断点直播]树莓派4B加装风扇并实现风力和CPU温度控制
- JAVA获取CKplayer真是地址,ckplayer的使用问题
- smartbi服务器缓存文件,导出资源 - Smartbi V10帮助中心 -
- I MM CO T-CODE
- MSP430-流水灯和key
- mysql连接navicat premium 15的具体方法 附navicat的官网连接
- Chapter 4 Part 5 WPAS扫描源码走读
- C语言写出猜数字游戏的代码
- 第7章 项目成本管理
- 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 【飞鱼科技】最新社招信息
热门文章
- jQuery 的选择器
- 如何解决Android 5.0中出现的警告:Service Intent must be explicit
- Eclipse使用新手教程
- dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启
- ADO.NET——二级联动 +ajax
- List集合2-LinkedList
- java——原型模式
- Selenium常用方法及函数、txt参数化
- jQuery 1.9+ ajaxStart事件无效,无法被触发的原因。
- Servlet开发配置