用于 64 位机器的 psyco 替代品

Posted

技术标签:

【中文标题】用于 64 位机器的 psyco 替代品【英文标题】:Alternative to psyco for 64-bit machines 【发布时间】:2011-03-16 20:43:06 【问题描述】:

Psyco 太棒了when it works。但是,如果没有迁移到 Python 的 32 位版本,看起来我们不会获得 64 位版本anytime soon。是否有任何替代 psyco 可以加速受 CPU 限制的通用 python 代码的替代品?

相关

Psyco x64?

What are the possible pitfalls in porting Psyco to 64-bit?

【问题讨论】:

pypy,或将计算绑定代码重写为 C 扩展 您能否调整您的性能关键代码以在 Cython 中工作? @Willcock - 我如此喜欢 psyco 的原因是,我可以通过 免费 获得多少加速。我使用 python 作为科学代码的脚本语言来勾勒出新的想法,通常我会在必要时转向编译语言。当代码是纯 python 时,psyco 经常给我我正在寻找的答案,而无需额外的工作。通常我采取的下一步是正确使用像 scipy 这样强大的计算库。 【参考方案1】:

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

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

来自二月份的 PyPy blog post:

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

【讨论】:

值得注意的是,PyPy 通常比 Psyco 快:bit.ly/f9mQL7(并且每周都在变快:speed.pypy.org)。【参考方案2】:

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

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

如今在 CPython 中加速瓶颈代码的成熟替代方案是 Cython 和 numba。 (还有其他“蜉蝣”here)


Numba,一个用于 CPython(如 Psyco)的 JIT 编译器库,专注于数字代码。只需将jit 函数装饰器放在瓶颈函数上,它就可以提供令人印象深刻的速度提升(10..200 倍,超过 psyco / PyPy)。它在开箱即用的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 静态代码,以相当简单的方式实现更大的速度增益(接近 C 速度),特别是对于数字/数组代码和一些 OO 工作在热点 Python 代码中键入声明。 C 速度字符串处理需要更多涉及的编码。

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

【讨论】:

以上是关于用于 64 位机器的 psyco 替代品的主要内容,如果未能解决你的问题,请参考以下文章

寻找 Psyco 的良好替代品(Python->C 编译器)[关闭]

用于 64 位 Windows 7 机器的 Microsoft ODBC 驱动程序的替代品(将 Excel 数据获取到 SQL)

用于 64 位应用程序的 Stingray Objective Toolkit C++ 的替代品?

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

微软C++编译器太烦人了!是不是有为 Windows 32/64 位编译的替代方法?

在64位Windows 7中替换Vern Buerg的list.com