6

Psyco工作时非常棒。但是,除了迁移到 32 位版本的 Python 之外,看起来我们不会很快获得 64 位版本。是否有任何替代 psyco 可以加速受 CPU 限制的通用 python 代码的替代品?

有关的

灵能x64?

将 Psyco 移植到 64 位可能存在哪些缺陷?

4

2 回答 2

5

答案是改用PyPy。来自http://psyco.sourceforge.net/introduction.html

我在 2006 年的计划是将 Psyco 中实现的技术移植到 PyPy。

来自 2 月份的 PyPy博客文章

...亮点和 pypy 的状态:
* 大多数 Python 基准测试的运行速度比使用 CPython 或 Psyco 快得多
* 真实世界的 PyPy 编译器工具链本身(200 KLocs)运行速度是原来的两倍
* 支持 x86 32 和 64 位,并且正在开发中支持ARM的
...

于 2011-03-16T23:01:42.087 回答
2

Psyco 开发人员指出, PyPy并不是 Psyco 的方便替代品,只是为了提高瓶颈代码的速度。它的另一个生态系统。

使用 PyPy 有很多含义,对更大的项目提出了许多兼容性问题,并且是一个普遍的决定:这意味着切换到一个完全不同的 Python 实现,远离 Python 领导者开发人员的引擎盖和质量保证级别。PyPy因其在大多数真实项目中的速度提升而被夸大了。初次执行需要很长时间。内存占用巨大而丑陋。呈现的基准是“选定的”。并且项目总是需要一些库,或者 GUI / 服务器 / IDE / 调试问题会完全停止显示,或者增加开发和调试时间。速度增益很难预测,也很难通过聚焦来调整。它没什么好感觉的。

目前在 CPython 中加速瓶颈代码的成熟替代方案是Cythonnumba(这里还有其他“蜉蝣” )


Numba是一个用于 CPython(如 Psyco)的 JIT 编译器库,专注于数字代码。它提供了令人印象深刻的速度提升(10..200 倍,超过 psyco / PyPy),只需jit在瓶颈函数上放置一个函数装饰器。numpy它在开箱即用的阵列上和结合起来特别迅速!(与 Psyco 不同);然而到目前为止,Numba 对其他正常的 Python 代码没有任何作用,甚至大大减慢了这些代码的速度,这些代码主要适用于对象属性、字符串片段、通用列表、字典等(最差:0.04 倍速度,比 Psyco 差)。与 Psyco 不同,Numba 是一个巨大的安装,并且是一个缓慢的导入(绘制 numpy)。但它也可以让从选定的函数创建预编译的静态模块,然后不再需要安装 numba 来进行部署(类似于 Cython)。


Cython是一种 Python 和 C 混合语言静态编译器(Python 语言的超集),它采用 C 编译器管道并生成 DLL 模块,通常通过将一些瓶颈函数重构为单独的模块来使用。但是,即使在Cython 编译不变的更大 Python 模块时,这通常已经产生了大约 2 倍的速度增益,就这么“免费”!然而,那些编译的 DLL 模块比 .pyc/.pyo-s 大得多。可以说 Cython 将 Python 字节码展开为直接的 C 函数调用。它对常量等做了一些进一步的优化。(Wheezy.web的 pip 安装,例如默认情况下,Cython 会以一种无耻的方式在没有警告的情况下将其所有代码 - 这使得在开发过程中调试和检查变得困难)

除了未更改代码的“免费”速度增益之外,通过将一些 Cython 静态类型声明放入热点 Python 代码。C 速度字符串处理需要更多涉及的编码。

Cython 允许通过关注瓶颈并以细粒度的方式无缝地使用 Cython 类型调整代码,从而将速度不断提高到 C 速度。这是一种独特的优势,并且比 Psyco、Numba 和 PyPy(因为它)具有更大的潜力。它是一个没有死胡同的成熟选择。

于 2017-05-09T18:35:19.077 回答