Python3.13的JIT是如何实现的

【Python】高效之JIT(Just-in-Time) 解释Python JIT 工具 阅读详情

去年圣诞节前,CPython的core dev向世界宣布了一条令人振奋的消息,即Python虚拟机可以以JIT的形式执行字节码。

什么是JIT

JIT(Just In Time)是一个老生常谈的话题了。通俗来讲,JIT是指虚拟机可以将IR(比如Python字节码)编译成机器能理解的机器码,从而加速程序运行。这里的Time应该理解成Runtime,也就是说在运行期间生成了机器码并执行的方式就算JIT,这区别于传统的先编译后执行的AOT方式。

在Python3.13中,虚拟机仍然会读取前端生成的字节码,但是不是解释执行,而是翻译成CPU能理解的机器码让CPU执行。由于是机器指令,所以程序的执行效率会比C语言代码快得多。

然而,CPython的JIT实现起来并不简单。由于CPython的字节码过于“动态”,直接翻译成静态的机器码难度非常大。在本次PR的作者Brandt Bucher的演讲中,他总结了三点困难,一是去掉解释器架构(overhead)、二是静态编译优化的字节码(原文是trace,指一次运行中执行到的字节码)、三是映射成机器码(即reduce indirection)。

什么是微指令(UOP)

CPython的JIT不是一个PR就能实现的,它需要前面版本提供的微指令支持。其实在去年7月份,CPython就加入了微指令的概念。它是将基本的字节码再次拆分成粒度更细的原子操作,也就是微指令。举一个例子,当python程序执行到了字节码JUMP_BACKWARD,它会往回跳转到某个已经执行过的字节码。但是这个跳转指令也可以拆分成更详细的微指令。比如跳回当前trace的顶部,那它会被替换为JUMP_TO_TOP微指令。比如跳到当前trace外的其他地方,它会被替换为SAVE_IP和EXIT_TRACE两个微指令。

虽然JUMP_BACKWARD和SAVE_IP都是字节码,但是已经不是一个维度了。处于粒度更细的维度叫做Tire2字节码,反之是Tire1字节码。

什么是copy-and-patch

copy-and-patch是实现JIT的一种方式。它是一种通过指令模板的方式简化经常执行的Tire2字节码。所谓的指令模板就是一些预设的机器码,当解释器在第一次执行代码的时候会观察有哪些字节码是循环调用的,这样在后续执行中它们会被替换成预设的机器码以提升速度。

比如LOAD_FAST字节码对应的是这样的C代码——

我们把精髓提取出来做成模板(注意相似代码部分)——

然后再把这部分代码转换成机器码——

最后,再把这些机器码重新织入CPython中——

这样,在CPython中可以直接执行机器码了,远远快于原本的C语言代码。

实操

为了感受一下CPython的JIT,我租了一台Ubuntu22.04。

首先,需要安装LLVM,而且必须是LLVM-16。最快的方法是在GitHub上下载编译好的安装包。

ruby
复制代码
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.4/clang+llvm-16.0.4-x86_64-linux-gnu-ubuntu-22.04.tar.xz

然后解压安装包,在目录bin内有现成的clang-16。将其配置成环境变量。

其次,准备一个bootstrap的Python。 因为CPython项目内有很多代码是靠Python脚本生成的,所以需要一个低版本的Python来生成这些代码。这里建议使用Python3.11以上的Python作为bootstrap Python,因为更低版本的Python有些脚本运行不了。

然后运行以下指令

go
复制代码
./configure --enable-experimental-jit
make
make install

这样,你就拥有了一个支持JIT的python。接下来下载pip——

arduino
复制代码
wget https://bootstrap.pypa.io/get-pip.py
python3.13 get-pip.py

用pip安装pyperformance,并跑测试用例——

arduino
复制代码
python3.13 -m pip install pyperformance
python3.13 -m pyperformance run -o py313-jit.json

同样用常规版本的Python3.13跑相同的测试用例,并比较它们——

vbnet
复制代码
python -m pyperformance compare py313.json py313-jit.json

Emmm,几乎都是变慢的。所以说运行速度并没有提升,就像Brandt Bucher说的,这个只是实验版本,如果效果不好的话完全可以在未来版本中删去这个功能。目前,也是在考虑不断优化提升这些微指令模板。

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

Python很慢,但它即将变得更快 因为它易于学习、用途广泛,并且拥有数千个用于数据科学的有用库。但它不是快速的一件事。 这将在 Python 3.11 中发生变化,目前处于其预览版(版本 3.11.0b1)的第一个 beta 阶段,在今年晚些时候稳定发布之前。Core Python (CPython) 开发人员 Mark Shannon 在 PyCon 2022 会议上分享了有关使 Python 更快的项目的详细信息,开发人员还展示了在浏览器中运行 Python 代码目标的进展。 去年,微软资助了 Python 软件基金会 (PSF) 阅读详情

相关推荐

Python JIT 编译器库之Pyjion使用详解

Pyjion 是一个针对 Python 解释器的 JIT 编译器,旨在提高 Python 代码的性能。本文将深入探讨 Pyjion 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。

Rocky006的博客 1653

(超级详细)jit的介绍和用法(python加速)

文章目录前言Lazy compilationEager compilation 前言 jit是numba库有用功能里面最核心最屌的功能。 from numba import jit 普通python我不知道有没有安装numba这个库,反正anaconda是默认安装的。 我们知道,python是解释性语言,数据类型可以是动态地,带来了很多方便,但是速度也大大降低。而编译性语言,例如c/c++很快,所以jit就是用来编译python的,编译好处就是,可以对代码进行优化,从而加速。 jit的编译有几种模式,各个

qq_43391414的博客 3万+

Python并发与性能革命:自由线程、JIT编译器的深度解析与未来展望

Python正经历重大性能变革,3.13版本引入自由线程突破GIL限制,使多核并行成为可能(计算密集型任务加速3倍),同时采用JIT编译器实现热点代码自动优化(数值计算提速133%)。未来版本将融合自由线程与JIT,支持GPU编译和更先进的并行模型。新特性还包括增强模式匹配、异步推导式和精细错误定位。建议科学计算优先3.13+版本,Web服务选择3.12异步优化,通过渐进式迁移拥抱Python的并行计算新时代。

qq_44623314的博客 1493

chatgpt赋能python:了解PythonJIT:提高性能的利器

JIT编译是一种优化方法,通常在运行时根据需要将计算机程序的部分进行编译,以提高执行效率。与前置编译不同,使用JIT编译器的程序在执行时仅编译已经被执行的代码段,从而避免了冗余编译。因此,JIT编译器的使用可以提高程序的性能,这也是为什么许多编程语言都支持如此工具。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT。

lvsetongdao123的博客 697

探索 RustPython:用 Rust 编写的 Python 3 解释器

摘要: RustPython是用Rust语言编写的Python 3解释器,支持Python 3.13.0及以上版本,旨在提供高性能和安全性。其特性包括跨平台/WebAssembly支持、实验性JIT编译器(可加速Python函数执行),以及嵌入Rust应用的能力。项目已应用于GreptimeDB、pyckitup等实际场景。用户可通过源码编译或WASM部署使用,并支持SSL和pip安装。尽管仍在开发中,RustPython为Python生态提供了Rust的高效与安全优势,是探索Python未来的创新工具。同

weixin_44626085的博客 1242

问题解决:打开VMware创建的虚拟机,电脑立刻蓝屏并重启

VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti

weixin_55118477的博客 3万+

Python 3.13 JIT开启新纪元:C++级性能真的实现了吗?

Python 3.12后性能瓶颈有解了!本文深入Python 3.13 JIT性能实测,揭示其在数值计算与循环密集场景下的真实表现,对比C++效率差距。核心优化机制解析+典型用例对比测试,带你判断是否值得升级,值得收藏。

FuncInk的博客 898

Python广度优先搜索BFS - 蓝桥13届省赛污染海域

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。输出一个整数,表示N * M的海域中有几块是没被污染的独立海域。

m0_69865359的博客 264

Python 3.13来了!JIT启用后性能提升显著,但90%的人还不知道如何正确配置

auto-generated

Instrustar的博客 1077

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 523

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)Step 1 软件安装Step 2 硬件获取Step 3 开始从头到脚建一个工程Step 3.1 新建一个工程 从0开始学习FPGA,最好的办法就是先建一个最简单的模块,并且跑起来,然后再慢慢展开。下面这个例子是要按照一定的周期点亮核心板上的一个led。 Step 1 软件安装 这个从0开始学习是用的xilinx的SPARTAN6。SPARTAN6集成开发环境用ISE,不能用Vivado,各自对应的版本不同。安装

xfacexx点点记录 5515

【Python开发者必看】Python 3.13 JIT实测报告:这些代码最受益于即时编译

auto-generated

FuncIsle的博客 955

PostgreSQL 在 Windows操作系统 无管理员权限情况下的部署详解

但是因为使用默认5432端口,我们修改了端口,所以连接报错,需要修改local连接信息,右键-属性修改相应信息即可,方式同上。(也别太任意吧,个人习惯工具放在不包含中文及特殊字符的目录,另外目录名尽量简短,避免不必要的麻烦)图中我解压到了自己的tools\postgresql18。1)如果想修改默认的5432端口,找到初始化目录中的(上面的tools\postgresql18\。此处替换成你的实际目录\tools\postgresql18\pgsql\pgAdmin 4\runtime。

dong_zhi2328的博客 1117

Python性能瓶颈有救了?实测Python 3.13 JIT在高并发场景下的惊人表现

auto-generated

PixelStream的博客 675

uniapp - 实现安卓App打包上架应用商店详细教程,详解Hbuilder打包编译apk发布上传到应用市场全流程,提供uniApp云打包、离线打包app、原生本地打包,附带APP备案和安卓证书申请

uni-app,安卓,APP,应用商店,打包编译apk,上架到应用市场,如何打包app并发布到主流应用市场,发布为AndroidApp流程,应用备案,如何申请安卓证书,hbuilder发布安卓apk后怎么上传到各家软件商店,创建app证书,uniapp发行原生APP本地打包安卓APK,详细最全的步骤教程,项目打包成apk,云打包,安心打包,安卓app离线打包,一直审核不通过,被拒绝,不符合规范,上架发布失败,申请安卓证书和获取证书信息,uni-app打包发布安卓Android软件到各大应用商店,腾讯应用

🏆 前端领域优质创作者 1万+

杰理外挂flash使用教程(三): 打包提示音到外部flash(2)

本教程详细介绍了提示音制作与程序配置的全流程规范。提示音制作要求包括:英文命名(8字符内)、单声道转换、标准目录结构(cpu/br23/tools/)及使用user_tone_g.bat脚本生成res.bin资源文件。程序配置需修改:1)启用NOR_FS文件系统;2)调整存储空间;3)配置外置Flash参数;4)增强下载脚本追加资源参数。测试阶段建议替换开机提示音验证功能,扩展开发可参考tone_player.c的索引播放逻辑。所有操作均配有图示说明,关键配置需修改对应头文件和脚本参数。

qq_42014563的博客 587

Python 3.13 JIT性能全面评测:7个关键场景下的加速比与优化建议

auto-generated

FuncInk的博客 716

PCB制造工艺参数到AD规则设置

本文提供了PCB设计与制造的落地指南,强调需先了解PCB厂的工艺参数,再在Altium Designer中设置相应规则。核心步骤包括:获取PCB厂的关键工艺参数(线宽/线距、过孔尺寸等),在AD中设置电气规则、布线规则、阻焊规则等,并进行DRC检查。文章还给出了常见问题避坑建议和快速落地模板,帮助设计师确保设计符合生产要求,避免因工艺不匹配导致的报废或成本增加。

qq_37999850的博客 293

Python3.13引入JIT编译器?揭秘官方未公开的性能优化内幕

掌握Python3.13性能飞跃的关键,本教程深入解析JIT编译器等新特性原理与应用,涵盖实际运行场景、性能对比测试及优化技巧。带你抢先体验官方未公开的提速内幕,提升程序效率,值得收藏。

codeink的博客 465

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

翻身了?Python3.11性能测评超3.10近64%

Python 这门编程语言的运行速度并不快,这早已不是什么秘密了。很多开发者期待这门语言的性能有所提升,这种情况或即将发生改变,或至少朝着正确的方向前进着,这也是Python的创始人重新出山后的决策结果之一。5月7日,Python团队发布最新的 Python 版本 - Python 3.11。目前发布的是一个测试版本 (Beta1) ,供开发者们测试或实验时使用。按照开发团队的所定下规约,预计将于 2022 年 10 月正式版本将释出。有好奇网友在自己的虚拟机上进行了测试,他在单独的 Docker 容器分别

m0_59236602的博客 4633

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python周刊2026W28 | PyPI命名空间、JIT路线图、Python 3.15预览

本周:PEP 752 提出 PyPI 命名空间保留防抢注,PEP 836 规划 CPython JIT 支持路线图,Python 3.15 JIT 预览性能提升 8-13%,PyCon US 2026 视频已上线,Celery on AWS ECS 完整指南发布。

业精于勤荒于嬉,行成于思毁于随 186

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

为什么顶尖团队已全面迁移到Python 3.13?这3个性能突破是关键

掌握Python 3.13性能提升秘诀,顶尖团队效率飙升。通过JIT编译优化、内存管理增强和启动速度大幅提升,适用于高并发与大数据场景。三大突破助力应用性能跃升,值得收藏并点击了解详情。

InstrGap的博客 916

Python 3.14 JIT编译器实测对比:CPython 3.13 vs 3.14,启动快37%、循环快2.8×?这3个flag你必须启用

Python 3.14 JIT编译器实测性能跃升,启动快37%、循环快2.8×,需启用--jit、--jit-threshold、--jit-optimize三个关键flag。本文涵盖CPython 3.13与3.14对比数据、JIT适用场景及调优策略,并整合Python 3.14 JIT编译器性能调优面试题汇总,值得收藏。

ProceChat的博客 258

从八股到实战!3月25日Python高并发面试,TaskGroup+JIT双杀通关

Python生态这几年变化太快了。你还抱着"asyncio就是gather和sleep"的老观念去面试,等于拿着菜刀进现代战场。TaskGroup让并发代码有了组织结构,JIT让Python有了原生性能。这两个技术点,一个解决"写不对"的问题,一个解决"跑不快"的问题,正好是面试官想听到的"体系化解决方案"。下次再被问到高并发,别背八股了。淡淡一笑:“我用TaskGroup做结构化并发,配合JIT做运行时优化,代码大概长这样……” 然后掏出笔记本展示上面那段。offer不给你给谁?

人工智能AI技术 382

Python 3.13版本标志着语言向系统级高性能计算的重要迈进

Python 3.13(2024年10月发布)带来多项重大升级:性能方面引入实验性JIT编译器(PEP 744)和无GIL模式(PEP 703),显著提升计算和多线程性能;语法增强包括改进的交互式解释器、扩展的模式匹配和类型提示功能;标准库移除老旧模块并强化安全特性。实验性功能需谨慎评估,但整体标志着Python向高性能计算的重要迈进。建议开发者逐步迁移以体验这些突破性改进,特别是高性能计算和多线程应用场景。

漫画之迷学编程 1087

Python 3.13重磅更新:这6个新功能你必须马上掌握

掌握Python 3.13新特性实战指南,快速提升开发效率。本文详解6大重磅更新,涵盖性能优化、语法增强与调试改进,适用于Web开发、数据处理等场景。关键功能实测演示,助你无缝升级项目,值得收藏。

VarFun的博客 1235
上一篇: 关于 Python 的 import,你了解多少?
下一篇: 别再低效筛选数据了!试试pandas query函数
AI大模型学习
博客等级 码龄4年 2471粉丝 620原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值