GraalPy是适用于 Java 的高性能可嵌入 Python 3 运行时:
- 在 Java 中直接加载和使用 Python 包
- 运行最新的 Python AI 和数据科学包
- Graal JIT编译 Python 以获得本机代码速度
- GraalPy 为 Jython 用户提供了升级途径
- 使用与 Java 类和框架交互的 Python 脚本扩展应用程序
- 使用 GraalVM Native Image 将 Python 应用程序打包为单个二进制文件
如何开始:
<dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>polyglot</artifactId> <version>24.1.0</version> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>python</artifactId> <version>24.1.0</version> <type>pom</type> </dependency> |
import org.graalvm.polyglot.Context; try (Context context = Context.create()) { context.eval("python", "print('Hello from GraalPy!')"); } |
测试:
- 以下是使用 Are-we-fast-yet 基准测试套件对 GraalPy 和其他程序与 JDK8 进行比较的一些基准测试结果:https://stefan-marr.de/downloads/tmp/awfy-bun.html
- 以下是所有基准测试以及几何平均值和中位数总体结果的表格:http://software.rochus-keller.ch/awfy-bun-summary.ods
网友: 1、我认为 Python 现在之所以有趣,是因为它与 ML 工具链、CUDA、Metal/MLX、pytorch、tensorflow、LLM 编码器/解码器等的集成度超过了 Python 本身。但是,当 Python 仅用于粘合代码,而重要部分则在本机代码中实现时,GraalVM 能否有意义地运行这些代码?
2、作为一名从 2005 年开始使用 Python 的前 Perl 黑客,我见证了 Python 的几次浪潮。(数值计算、数据科学、深度学习) Perl 是脚本和文本解析的领先工具。Python 很长一段时间内都没有真正取代它 — 直到人们开始编写需要维护的更复杂的脚本。6 个月后,Perl 读起来就像一行行的噪音,而我可以查看 20 年前的 Python 代码,用黑色美化它,然后理解它。
Python 被科学计算社区所接受,并为其提供了一些最早的库,如 numpy、f2py、scipy。我们中一些使用 MATLAB 的人也转而使用 Python。
然后数据科学诞生了。Pandas 建立在科学计算基础之上,最终出现了 scikit 和 matplotlib(模仿 matlab 的绘图)等库。
随后,tensorflow 出现了,并建立在数值库的基础上。随后是 PyTorch。
其他系统(例如 Django)的出现使得 Python 在构建数据库支持的网站方面变得流行起来。
突然间,出现了一种势头,如今几乎所有数值软件都有一个 Python API — — 其中包括 CPLEX 等专有软件。
Python 是入门门槛最低的粘合语言。例如,Spark 是用 Scala 编写的,具有高性能的 Scala API,但每个人都使用 PySpark,因为它更容易访问,尽管互操作成本较高。
与此相反的是 Ruby。它的语法比 Python 好得多,但当我在研究生院尝试使用它时,我很快就因缺乏数字库而受阻。Ruby 在 Rails 和配置管理之外从未找到一席之地。
本质上,Python——就像今天的 Nvidia 一样——押注线性代数(以及更广泛的数据处理)并取得了胜利。
我明白为什么人们讨厌 Python —— 它不是一门完美的语言。但是我们这些使用它的实用主义者明白其中的利弊。你牺牲了硬件性能来换取程序员的性能。你牺牲了封装的困难来换取有用的东西。你牺牲了语法的不完美来换取完成任务的能力。
我本可以在研究生院使用 Ruby(一种更优美的语言)并克服它的不足,但我无法按时毕业。Python 对我来说是一个务实的选择,直到今天仍然是我的选择(除了需要原始性能的情况)
3、 Python 从 Perl 和 Tcl 手中夺走了脚本的王冠之后,在学术界使用 Python 作为 C 和 C++ REPL 已经很常见了。