首页 > 解决方案 > cython: Cythonizing 一个大的字典查找

问题描述

给定一个只有硬编码查找字典的脚本,我想知道使用 Cython 编译它是否会带来任何性能提升。

字典文件如下所述,大小约为 5Mb。生成的 c 文件约为 65Mb。编译需要很长时间。有没有办法减少生成的 c 文件的大小和/或加快编译速度?或者,是否存在这种方法不起作用的根本原因?

文件名.py:

lookup_dict = {
     0: {"Value 1"},
     2: {"Value 2", "Something else"},
     3: {"Some other value"},
     # (...)
     99996: {"one", "two", "three value"},
     100000: {"Another value"},
}

def lookup(idx: int) -> set:
    try:
        return lookup_dict[idx]
    except KeyError:
        return set()

Python setup.py 脚本:

from distutils.core import setup
from distutils.extension import Extension

from Cython.Build import cythonize
from Cython.Distutils import build_ext

ext_modules = cythonize(
    [Extension("lookup_module", [r"filename.py"])], language_level="3"
)

setup(
    name="Lookup Module",
    cmdclass={"build_ext": build_ext},
    ext_modules=ext_modules,
)

然后使用以下方法调用:

python setup.py build_ext --inplace

(gcc 版本 7.4.0,Ubuntu 18.04)

标签: pythondictionarygcccythoncythonize

解决方案


推荐阅读