我在Python中有一个翻译器(因此,它类似于热翻译器[1])。运行有点慢。所以我转向了PyPy。切换到它之后,我发现它实际上要慢一些。
因此,该项目将获取YAML文件,对其进行解析,转换内存树并以不同的格式吐出文件-有点像编译器。
PyPy 不是否适合这种用例?我以为它是为CPU绑定任务设计的。
答案 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