字节码编译为Python代码提供了多少加速?

时间:2013-07-18 02:43:13

标签: python cpython

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

或者,也许我可以轻松地对其进行基准测试。是否有一个Python标志可以在运行时给出以关闭编译?

1 个答案:

答案 0 :(得分:3)

cpython运行的所有代码必须先编译为字节码才能运行。这就是解释器的工作原理,你可能无法合理地改变它(没有编写自己的解释器)。

但是,默认情况下,加载的模块的已编译字节码将缓存在.pyc个文件中。这意味着下次加载时不需要再次编译。字节码缓存可能就是你所听到的,因为它可以加快以前使用的模块的导入数量。虽然加载模块后它不会改变性能。

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