用于 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++ 的替代品?