python - 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)
解决方案
推荐阅读
- angular - 是否可以在 mat-accord 中用 mat-form-field 替换 mat-expansion-panel-header?
- php - 单页上的 Wordpress 自定义侧边栏
- django - 加载 Django 夹具的问题。UnboundLocalError:分配前引用的局部变量“pk”
- c++11 - 容器线程安全
- java - JavaMail 连接超时不按属性工作
- excel - 根据 3 个参考在 excel 中创建一个时间表表
- javascript - 如何在 vue 应用程序中获取切换开关状态
- python - 添加到列而不创建 NaN 值
- vb.net - 单利计算有一些错误
- c# - Vector CANoe - 如何构建具有多个 C# 文件的 .NET 测试节点?