做棋牌网站违法嘛,个人主页html下载,如何注册网站免费注册,天津seo方案PyPy与CPythonPyPy是Python解释器CPython的直接替代品。CPython将Python编译为中间字节码然后由虚拟机解释#xff0c;而PyPy使用实时(JIT)编译将Python代码转换为本地机器的汇编语言。根据正在执行的任务#xff0c;性能提升可能会非常显着。平均而言#xff0c;PyPy将Pyth…PyPy与CPythonPyPy是Python解释器CPython的直接替代品。CPython将Python编译为中间字节码然后由虚拟机解释而PyPy使用实时(JIT)编译将Python代码转换为本地机器的汇编语言。根据正在执行的任务性能提升可能会非常显着。平均而言PyPy将Python加速了大约7.6倍一些任务加速了50倍或更多。CPython解释器根本不会执行与PyPy一样的优化方式并且可能永远不会因为这不是它的设计目标之一。最好的部分是开发人员需要很少甚至不需要努力来解锁PyPy提供的收益。只需将CPython替换为PyPy并且大部分都已完成。下面讨论了一些例外但是PyPy的目标是运行现有的并且未经修改的Python代码并为其提供自动化的速度提升。PyPy目前通过项目的不同版本支持Python 2和Python 3。换句话说你需要下载不同版本的PyPy具体取决于你运行的Python版本。 PyPy的Python 2分支已经存在了很长时间但到目前为止python 3版本的速度已经提高了很多。PyPy目前支持Python 3.5(发布版本)和Python 3.6(beta版本)。除了支持所有核心Python语言外PyPy还可以与Python生态系统中的绝大多数工具配合使用例如用于打包的pip或用于虚拟环境的virtualenv。大多数Python软件包即使是那些带有C模块的软件包都会按照原样运行。当然也存在一些限制我们将在下面介绍一些限制。PyPy如何工作PyPy使用其他即时编译器中的动态语言优化技术。它分析运行的Python程序以确定在程序中创建和使用对象时的类型信息然后使用该类型信息作为指导来加快速度。例如如果Python函数仅使用一种或两种不同的对象类型PyPy会生成机器代码来处理这些特定情况。PyPy的优化是在运行时自动处理因此你通常不需要调整其性能。高级用户可能会尝试使用PyPy的命令行选项来为特殊情况生成更快的代码但这种情况通常很少需要。PyPy也脱离了CPython处理一些内部函数的方式但它同时试图保留兼容的行为。例如PyPy处理垃圾回收的方式与CPython不同。并非所有对象一旦超出范围就立即回收所以在PyPy下运行的Python程序可能比在CPython下运行时显示占用更大的内存。但你仍然可以使用通过gc模块公开的Python高级垃圾回收控件例如gc.enable()gc.disable()和gc.collect()等等。如果你想在运行时获得有关PyPy的JIT(实时)行为的信息PyPy包含一个模块pypyjit它向你的Python应用程序公开了许多JIT关联信息。如果你的某个功能或模块在JIT上表现不佳那么pypyjit可以让你获得有关它的详细统计信息。另一个特定于PyPy的模块__pypy__暴露了PyPy特有的其他功能因此对于编写利用这些功能的应用程序非常有用。由于Python的运行的动态性有可能构建在PyPy存在时使用这些功能的Python应用程序而在不存在时忽略它们。PyPy的限制可能看PyPy起来像魔法一样神奇但其实它并不神奇。 PyPy同样具有某些限制可以削弱或消除某些程序的有效性。唉PyPy不是CPython运行时的完全的通用替代品。PyPy最适合纯Python的应用程序PyPy在“纯”Python应用程序中表现最佳换句话说也就是用Python编写的没有夹杂其他语言的应用程序中表现最佳。由于PyPy模仿CPython的本机二进制接口的方式与C库(如NumPy)接口的Python包也没有那么出类拔萃了。PyPy的开发人员已经解决了这个问题并使PyPy与大多数依赖于C扩展的Python包更加兼容。例如Numpy现在与PyPy兼容的非常好。但是如果你希望与C的扩展最大程度地兼容请使用CPython。PyPy适用于运行时间较长的程序PyPy优化Python程序的一个副作用是运行时间较长的程序通过PyPy的优化获益最多。程序运行的时间越长PyPy可以收集的运行时类型信息就越多它可以进行的优化就越多。一劳永逸的Python脚本不会从这种事情中受益。例如受益的Python应用程序通常具有长时间循环运行的行为或者在Web框架的后台中连续运行。PyPy没有预编译PyPy编译Python代码但它不是Python代码的编译器。由于PyPy执行其优化的方式和Python的固有动态特点因此无法将生成的JITted代码作为独立二进制文件发出并重新使用它。每次运行都必须编译每个程序。如果你想将Python编译成可以作为独立应用程序运行的更快的代码那么还是请使用Cython、Numba或当前实验性的Nuitka项目。