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

PyPy比使用文件转换器的CPython慢,python,pypy,Python,Pypy,我有一个Python翻译器(因此,基于类似于heat translator[1])。它跑得有点慢。于是我转向派比。切换到它之后,我发现它实际上慢了一点 因此,该项目接收YAML文件,对其进行解析,转换内存中的树,然后以不同的格式输出文件——有点像编译器 PyPy不适合这种用例吗?我以为它是为CPU限制的任务设计的 如果看不到您正在使用的YAML库(PyYAML,ruamel.YAML)和您的实际代码,就无法明确解释这一点。但是,如果使用标准加载程序: from ruamel.yaml impo

我有一个Python翻译器(因此,基于类似于heat translator[1])。它跑得有点慢。于是我转向派比。切换到它之后,我发现它实际上慢了一点

因此,该项目接收YAML文件,对其进行解析,转换内存中的树,然后以不同的格式输出文件——有点像编译器

PyPy不适合这种用例吗?我以为它是为CPU限制的任务设计的


  • 如果看不到您正在使用的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的reader/scanner阶段。

    如果可以创建反映工作负载的基准,可以将其作为问题提交给PyPy,并作为PR提交给python基准套件