使用 Cython 进行性能优化
使用 cython 性能优化

cython 是 Python 的一个库,可以利用它把 Python 代码转化为 C 扩展来使用 (pyd)

我们需要编写 pyx 文件

import time

def test():
   start = time.time()
   a = (x for x in range(100000000))
   # 使用 cdef 预定义数据类型,加快运算
   cdef long c = 0
   cdef int item
   for item in a:
       c = c + item
   end = time.time()
   print(end - start)

编写 setup.py 文件

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

# 编译后的模块名称,自己可以定义的
filename = "cython_test"
# 代编译的文件名
full_filename = "cython_test.pyx"

# 命令行参数,固定写法
setup(
   name="test_cython",
   cmdclass={"build_ext": build_ext},
   ext_modules=[Extension(filename, [full_filename])]
)

执行命令

python setup.py build_ext --inplace

然后会在同级目录生成 pyd 文件,然后可以直接在 Python 中 import 使用


高级用法

在 pyx 中使用 c 语言代码

通过 cython 自带的一些 c 源码,来使用 c 扩展

from libc.stdlib cimport atoi
# 这里就是导入了一些 c 扩展,这些 c 扩展是内置的。
from libc.math cimport sin
# 使用 c 扩展
sin(1)

自己编写的 c 源码文件里面的 c 扩展

cdef extern from 'math.h':
   # 这里是声明函数
   float sinf(float theta)


sinf(2)

 

最新评论
暂无评论
登录后评论