字节码编译给 Python 代码带来了多少加速?

Doc*_*awk 3 python performance bytecode cpython

我搜索了一段时间,发现了一些合理的说法,即 CPython 的编译允许更快地执行 Python 代码。不过,我想知道是否有人知道任何可以证明加速程度的基准测试。

或者,也许有一种简单的方法可以让我对其进行基准测试。是否有一个可以在运行时给出的Python标志来关闭编译?

Blc*_*ght 5

cpython运行的所有代码都必须编译为字节码才能运行。这就是解释器的工作方式,您可能无法合理地更改它(如果不编写自己的解释器)。

但是,默认情况下,加载的模块的编译字节码将缓存在.pyc文件中。这意味着下次加载它时不需要再次编译。您可能听说过字节码缓存,因为它可以大大加快以前使用的模块的导入速度。不过,加载模块后它不会改变性能。

您可以使用-B命令行选项或PYTHONDONTWRITEBYTECODE环境变量禁用字节码缓存。如果您想测试速度差异,您可能还需要删除任何现有缓存。在 Python 2 中,编译后的字节码将被写入源文件.pyc旁边的文件中.py。在 Python 3 中,这已更改为使用一个__pycache__文件夹,该文件夹可以保存.pyc来自不同版本的 Python 的多个文件(因此您可以同时拥有多个缓存版本,请参阅PEP 3147了解更多详细信息)。

  • 谢谢!这非常有帮助。但是,您是否知道任何基准测试可以证明字节码编译带来的加速?当他们第一次测试该功能时肯定进行了比较,是吗? (4认同)