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

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

ruisui884个月前 (02-03)技术分析31

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 性能” 的相关文章

Linux发行版Debian推出12.2及11.8版本,修复多个安全问题

IT之家 10 月 9 日消息,Debian 是最古老的 GNU / Linux 发行版之一,也是许多其他基于 Linux 的操作系统的基础,包括 Ubuntu、Kali、MX 和树莓派 OS 等,近日 Debian 推出了 12.2 和 11.8 版本,主要修复了多个安全问题。▲ 图源 Debia...

深入理解Vue.js组件通信:父子组件与子父组件数据交互详解

什么是Vue组件通讯 Vue.js 组件通信是指在 Vue 应用的不同组件之间进行数据交换和状态同步的过程。由于 Vue 的组件是基于单文件组件(SFCs)的模块化设计,每个组件都有自己的作用域,因此它们不能直接访问彼此的数据。为了使组件之间能够协同工作,Vue 提供了几种不同的通信方式。以下是 V...

vue组件间的九种通信方式

前言Vue组件实例间的作用域是相互独立的,而通常一个页面是由很多个组件构成,这些组件可能又嵌套了组件,形成了一个关系网图,它们的关系可能是像下图中一样,大致分为两种使用场景,父子组件间通信和非父子组件间通信,父子组件间通信又分为直接父子关系和间接父子关系。vue提供了多种通信方法,针对不同的通信需求...

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

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

在vue项目中封装WebSockets请求

在Vue项目中封装WebSocket请求包括以下步骤:1. 安装WebSocket库:首先,导入WebSocket库,例如`vue-native-websocket`或`socket.io-client`。根据项目需求选择适当的库,并根据官方文档进行安装和配置。2. 创建WebSocket服务:在V...

Firefox正针对Vue.js进行优化,下版本响应速度将“显著提升”

IT之家 9 月 7 日消息,据 Mozilla 官方博客发文显示,Firefox 浏览器正针对 Vue.js 进行优化,此前 FireFox 浏览器在面向 Vue 3 时遇到了一些性能问题。▲ 图源 Mozilla 官方博客目前开发人员已经对此进行了解决,在 Firefox 118 内部版本中进行...