PyPy比使用文件转换器的CPython慢

时间:2019-01-21 10:47:50

标签: python pypy

我在Python中有一个翻译器(因此,它类似于热翻译器[1])。运行有点慢。所以我转向了PyPy。切换到它之后,我发现它实际上要慢一些。

因此,该项目将获取YAML文件,对其进行解析,转换内存树并以不同的格式吐出文件-有点像编译器。

PyPy 是否适合这种用例?我以为它是为CPU绑定任务设计的。

  1. https://github.com/openstack/heat-translator

2 个答案:

答案 0 :(得分:1)

没有看到您正在使用的YAML库(PyYAML,ruamel.yaml)和您的实际代码,就无法确切解释。但是例如如果您使用标准的加载例程:

from ruamel.yaml import YAML

yaml = YAML(typ='safe')
with open('somefile.yaml') as fp:
    yaml.load(fp)

从文件加载YAML 1.2(或1.1)文档。如果您使用CPython运行该程序,则实际上将使用用C编写的读取器/扫描器,而使用PyPy运行该程序时,它将运行纯Python版本。

基于该文件,基于C的读取器/扫描器通过纯Python实现,可以使加载文档的速度提高一到两个数量级,因此对于PyPy编译Python不能等同于此,我并不感到惊讶。

过去,我简要介绍了同时使用PyPy时使用基于C的读取器/扫描器的情况,但这似乎并不琐碎,并且由于C编码的读取器/扫描器已过时且需要升级,因此该计划被搁置了。

使用PyYAML(适用于过时的YAML 1.1文档)时,尽管没有明确指示,它不会自动使用基于C的读取器/扫描器阶段,但也适用类似的原则。

答案 1 :(得分:0)

如果您可以创建一个反映您工作量的基准,则可以将其作为问题提交给PyPy https://bitbucket.org/pypy/pypy/issues,也可以作为PR提交给python基准套件https://github.com/python/performance