- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
PyPy is a reimplementation of Python in Python, using advanced techniques to try to attain better performance than CPython. Many years of hard work have finally paid off. Our speed results often beat CPython, ranging from being slightly slower, to speedups of up to 2x on real application code, to speedups of up to 10x on small benchmarks.
这怎么可能?使用哪个 Python 实现来实现 PyPy? CPython ? PyPyPy 或 PyPyPyPy 击败他们的分数的机会有多大?
(在相关说明中......为什么有人会尝试这样的事情?)
最佳答案
“PyPy 是 Python 中 Python 的重新实现”是一种相当误导性的描述 PyPy 的方式,恕我直言,尽管它在技术上是正确的。
PyPy 有两个主要部分。
翻译框架是一个编译器。它将 RPython 代码编译为 C(或其他目标),自动添加垃圾收集和 JIT 编译器等方面。它不能处理任意 Python 代码,只能处理 RPython。
RPython 是普通 Python 的一个子集;所有 RPython 代码都是 Python 代码,但不是相反。 RPython 没有正式的定义,因为 RPython 基本上只是“可以被 PyPy 的翻译框架翻译的 Python 的子集”。但是为了被翻译,RPython 代码必须是静态类型的(类型是推断出来的,你不需要声明它们,但它仍然是每个变量严格的一种类型),你不能这样做诸如在运行时声明/修改函数/类之类的事情。
解释器是一个用 RPython 编写的普通 Python 解释器。
因为 RPython 代码是普通的 Python 代码,所以您可以在任何 Python 解释器上运行它。但是 PyPy 的速度声明都不是来自于以这种方式运行。这只是为了快速测试周期,因为翻译解释器需要很长时间。
了解了这一点后,关于 PyPyPy 或 PyPyPyPy 的猜测实际上没有任何意义应该是显而易见的。你有一个用 RPython 编写的解释器。你把它翻译成可以快速执行 Python 的 C 代码。过程在那里停止;没有更多的 RPython 可以通过再次处理来加速。
所以“PyPy 怎么可能比 CPython 更快”也变得相当明显。 PyPy 有一个更好的实现,包括一个 JIT 编译器(我相信,如果没有 JIT 编译器,它通常不会那么快,这意味着 PyPy 只对易受 JIT 编译影响的程序更快)。 CPython 从未被设计为 Python 语言的高度优化实现(尽管他们确实试图使其成为高度优化的实现,如果你遵循差异的话)。
PyPy 项目的真正创新之处在于,他们无需手动编写复杂的 GC 方案或 JIT 编译器。他们在 RPython 中相对简单地编写解释器,并且对于所有 RPython 比 Python 低级,它仍然是一种面向对象的垃圾收集语言,比 C 高级得多。然后翻译框架自动添加了类似的东西GC 和 JIT。因此,翻译框架是一项巨大的工作,但它同样适用于 PyPy python 解释器,但它们改变了它们的实现,允许在实验中更自由地提高性能(不用担心引入 GC 错误或更新 JIT 编译器以应对变化)。这也意味着当他们开始实现 Python3 解释器时,它会自动获得相同的好处。以及使用 PyPy 框架编写的任何其他解释器(其中有许多处于不同的抛光阶段)。并且所有使用 PyPy 框架的解释器都会自动支持框架支持的所有平台。
因此,PyPy 项目的真正好处是(尽可能地)分离出为动态语言实现高效的平台无关解释器的所有部分。然后在一个地方提出一个很好的实现,可以在许多解释器中重复使用。这不是像“我的 Python 程序现在运行得更快”那样的立竿见影的胜利,而是对 future 的美好前景。
而且它可以更快地运行你的 Python 程序(也许)。
关于python - PyPy——它怎么可能打败 CPython?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591879/
在PyPy的 build 阶段,该脚本会生成一些看起来非常有趣的漂亮 ASCII 字符。每个字符代表什么?如何解释这个输出?在生成这种 ASCII 艺术时,PyPy build 到底在做什么? 最佳答
如何使用 PyPy(最好是 pypy3)而不是带有 poetry 的标准 python? 也就是说,pyproject.toml中应该存储什么?是否还需要进行其他更改? 最佳答案 事实证明,它就像安装
将 pypy 实现转换为 c 文件并在配备 2G 内存和 Intel Core2 2GHz CPU 的现代笔记本上构建 pypy-c 需要花费数小时。 我知道这是一个 CPU 密集型任务,但它必须这么
每次在 PyPI 上发布 Virtualenv 的新版本时,我都希望收到通知,最好通过电子邮件或 RSS 提要。这可能吗? 最佳答案 是的,可以从 pypi.org 获得 RSS 提要,请参阅:htt
我有一个 Python 扩展,需要针对基于 Windows 的 Appveyor 持续集成服务上的 PyPy 解释器进行编译。我如何在那种环境中获得 PyPy? 最佳答案 将此 PowerShell
PyPy GIL 是 RPython 中 PyPy 解释器实现的一部分,还是 translate.py 自动添加的东西?即,如果我要在 RPython 中编写自己的新语言解释器并通过 translat
我已阅读 PyPy -- How can it possibly beat CPython?以及无数其他事情,但我无法理解用 Python 编写的东西如何比 Python 本身更快。 我能想到的唯一方
我正在处理一些 OpenAI 的 API 集成。我在安装 tiktoken(用于 OpenAI 模型的快速 BPE 标记器)时遇到问题。 当我尝试在我的 macbook 机器上运行时: pip3 in
我正在处理一些 OpenAI 的 API 集成。我在安装 tiktoken(用于 OpenAI 模型的快速 BPE 标记器)时遇到问题。 当我尝试在我的 macbook 机器上运行时: pip3 in
这可能是一个非常愚蠢的问题,但是“PyPy”和“PyPI”之间有什么区别?它们是一回事吗? 最佳答案 PyPy是 python 的替代实现: PyPy is a fast, compliant alt
我想在与 Python 2.7 版本兼容的 window 7 上卸载 pypy 版本。控制面板的“卸载程序”中没有 pypy。到目前为止,我还没有找到任何文档。 最佳答案 PyPy 不会在 Windo
PyPy 是否在编译时进行静态类型检查以在编译时捕获类型错误?如果不是,像 HM 类型推断这样的东西是否有助于在编译时捕获这些错误? 最佳答案 否 在两个帐户上。 (我假设 PyPy 是指具有 JIT
我在弄清楚如何让我的 Python 包处理到 PyPi 时遇到了一些问题,这样我就可以很容易地将它与其他项目的其他依赖项一起安装(即使用需求条目或简单的“pip install xyz”)-这里列出了
例如,如果我有一个 Pypi 上已经存在的包 foo。我希望能够在我的 setup.py 中使用新版本号进行 git Push origin master 操作,然后 Pypi 以某种方式自动更新其版
新版 PyPy 附带了集成的 Stackless。据我所知,捆绑的 Stackless 与 2001 年的原始 Stackless 不同。所以主要是带有调度器的绿色线程框架。 Greenlet 是 S
我按照指南 How to submit a package to PyPI提交一个包裹。它抛出了以下错误: Traceback (most recent call last): Fi
我使用诗歌创建了一个Python包然后我使用诗歌构建、诗歌发布将我的包发布到 PyPI,但 PyPI 中缺少我的包描述。 该项目托管在 GitHub 中:https://github.com/fsis
我听说过很多关于 PyPy 项目的信息。他们声称它比 CPython 上的 their site 解释器快 6.3 倍。 每当我们谈论 Python 等动态语言时,速度都是最重要的问题之一。为了解决这
我们将 artifactoy 更新到最新版本 5.10.3 以支持 pypi 更新。 在这次更新之后,我们遇到了一些非常慢的 pip install --upgrade 时间。pip install
我一直在 ESP32-WROOM-32D 上使用 uasyncio。在所有测试之后,我正在尝试将固件用于我的其他板,但默认情况下 uasyncio 并未与 micropython 一起安装。我尝试通过
我是一名优秀的程序员,十分优秀!