当前位置:首页 > 技术分析 > 正文内容

Python 速度提升 10 到 100 倍 —— 麻省理工为 Python 实现类 C 性能

ruisui883个月前 (02-03)技术分析21

Python 是一种流行的编程语言,但它通常不是高速应用程序的首选。然而,麻省理工学院的计算机科学家和他们的同事开发了一种名为 Codon 的 Python 编译器,它可以将 Python 代码转换为本机机器代码,而不会牺牲运行时性能。

使用 Codon 可以使得 Python 加速在单个线程上大约为 10-100 倍或更多,并且 Codon 的性能通常与 C/C++ 相当或更好。Codon 通过依赖静态类型编译器引擎并省略动态类型操作和运行时反射等使代码更难以分析和优化的功能来实现这一点。

测试

那么,Codon 真的像它声称的那样快吗?一位开发者在 Codon 论坛上进行了测试。

$ cat fib.py 
 
 
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)
 
 
if __name__ == "__main__":
    import sys
    print(fib(int(sys.argv[1])))

CPython 3.11

$ python fib.py 40
102334155
# mem: 8'816_KB
# time: 18.42_s

PyPy 7.3.9

$ pypy fib.py 40
102334155
# mem: 74'596_kB
# time: 4.99_s
# ~= 3.7x

Codon 编译

$ codon build -release fib.py
$ ./fib 40
102334155
# mem: 5'612_kB
# time: 0.26_s
# ~= 70.8x

最终,发现使用 Codon 编译的简单 Fibonacci 脚本比 CPython 版本快 70 多倍

Codon 已在 GitHub 上开源,地址如下:

https://github.com/exaloop/codon

概述

Codon 最初是作为在 Python 中创建高性能领域特定语言 (DSL) 的框架而开发的,现已发展成为一种与 Python 3 基本兼容的语言编译器。该工具链支持开发 DSL,这些 DSL 与添加的领域共享 Python 的语法和语义-特定功能和 IR 优化。由于 Codon 可以在没有任何 Python 运行时开销的情况下输出本机机器代码,因此该论文的作者声称他们可以使用 Python 脚本实现类似 C 的性能。

Codon 还可以显着加速标准 Python 程序,尽管那些依赖外部库(如 Django 或 DocUtils)的程序必须依赖 CPython 桥,该桥将性能限制为 CPython。尽管如此,Codon 正在商业上用于从量化金融和生物信息学到深度学习等领域,其开发人员计划在未来几个月内实现缺失的 Python 功能。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1225.html

标签: pypy3
分享给朋友:

“Python 速度提升 10 到 100 倍 —— 麻省理工为 Python 实现类 C 性能” 的相关文章

费用管理解决企业财务难题

目前来讲,国内大多数企业费用预算管理都是由财务部门“一手包办”,与之相适应的是费用管理的信息化手段是通过财务管理软件来实现,仅仅局限于财务预算管理层面,从而使预算管理处于“预而不算”的状态,表现为信息滞后、执行者在执行预算过程中处于被动地位、可控性差、考核难以奏效。而且由于对各部门预算缺乏约束力,员...

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发人员要本地新建分支然后在提交上来列出修改了哪些细节管理员可以管理这些分支合并到master6、指派合...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

HTML5学习笔记三:HTML5语法规则

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img input6.废除的标签font center big7.新添加的标签将在下一HTML5学习笔记中重点阐述。...

一套代码,多端运行——使用Vue3开发兼容多平台的小程序

介绍Vue3发布已经有一段时间了,从目前来看,其生态还算可以,也已经有了各种组件库给予了支持,但是不管是Vue3还是Vue2都无法直接用来开发小程序,因此国内一些技术团队针对Vue开发了一些多端兼容运行的开发框架,今天来体验一下使用Taro来体验一下使用Vue3开发多平台运行的小程序,以便于兼容各大...

vue开发微信小程序 - 登录组件

移动端登录功能抽象为通用组件,满足:不同移动端应用中一键登录功能复用支持多种登录:微信登录、H5、QQ登录登录组件使用//引用登录组件 import login from "../components/user/login.vue" export default { compone...