一、什么是Cython,
如果你了解Python,就会知道Python相比于其他语言,性能差了不是一点半点。但是Python的底层实现大量使用了C语言,可以与C语言很好的结合。并且在Python中由于GIL全局解释器锁的机制,导致python在实现CPU密集型操作时非常吃力。Cython是Python的一个扩展,用于将Python代码编译为C代码,并且可以完美的避开GIL机制,,从而显著提升性能。
二、调用.C文件
1、安装cython
pip install cython
2、编写.h头文件和.c文件
int sub(int n);//sub.h
编写C语言文件sub.c
#include "sub.h"
int sub(int n) {
return n*(n+1)/2;
}
3、编写sub.pyx文件
cdef extern from "sub.h":
int sub(int n)
def sub_with_c(n):
return sub(n)
4、编写setup.py文件
from distutils.core import setup,Extension
from Cython.Build import cythonize
ext = Extension(name="wrapper_sub",sources=["sub.pyx","c/sub.c"],language_level=3,)
setup(ext_modules=cythonize(ext))
5、运行setup.py文件
python setup.py build
会生成一个sub.c文件和build目录以及wrapper_sub.cpython-39-darwin.so文件就是我们需要的共享模块。其余的可以删除。
6、调用共享模块
import wrapper_sub
if __name__ == '__main__':
print(wrapper_sub.sub_with_c(100))
通过调用C编译后的文件可以极大的提高运行速度,并且可以避免GIL全局解释器锁的影响。
三、将Python代码编译为C共享模块
1、编写ArrarySort.pyx文件
这里实际上就是编写Python代码,将py后缀改为pyx
def arr_list(arr:list):
arr.sort()
return arr
2、编写setup.py脚本
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("ArrarySort.pyx",language=3))
3、运行setup脚本
python setup.py build_ext --inplace
生成ArrarySort.cpython-39-darwin.so文件,其余文件可以删除。
4、调用共享模块
import ArrarySort
a= ArrarySort.arr_list([12,2134,2345,12,2])
print(a)
四、手动编写Cython
Cython本身有一套自己的写法规则,类似Python和C语言。可以直接编写pyx文件,将pyx编译为C代码,gcc编译器编译为共享模块(这一步可以不需要手动操作,distutils 自动处理)。
手动操作的话指令
gcc -shared -fPIC -I/python3.9 -o bubble_sort.so bubble_sort.c
1、编写pyx文件
这里使用Cython自身的语法规则,不需要使用C或Python进行其他的操作
def bubble_sort(arr):
cdef int n = len(arr)
cdef int i, j
cdef int temp
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
2、编写setup.py脚本
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("arrary_sort.pyx")
)
3、运行setup.py脚本
python setup.py build_ext --inplace
会在当前目录中生成一个与 bubble_sort 相对应的 C 文件,并编译生成一个共享对象文件(在 Linux 上是 .so 文件,在 Windows 上是 .pyd 文件)。这时候我们只需要共享文件即可。
4、在Python中调用共享模块
import arrary_sort
arr = [1,3,2,4,3,5,6,2,6,7,3]
arrary_sort.bubble_sort(arr)
print(arr)
五、总结
Cython是一种工具,可以让Python程序跑得更快。它通过将Python代码转换成C语言代码并进行编译,大大提升了程序的执行效率。使用Cython,你可以在Python代码中直接书写C语言的类型声明,这样不仅减少了解释器的开销,还能更高效地执行计算密集型任务。此外,Cython还能直接调用C语言的函数和数据类型,使得Python程序可以利用C语言的高性能。这种方法特别适合需要处理大量计算任务的场景,比如科学计算、数据分析和机器学习。同时,Cython保留了Python的简洁易用,开发者可以逐步优化代码,不需要一次性重写整个项目。这样,既能享受Python的开发便利,又能获得接近C语言的执行效率。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容