【简单实例】如何使用C++加速python程序

C++党最鄙视Python的两个原因:1,计算速度太慢;2,动态语言特性。

对于第2个原因,这需要python程序员好好规范自己的编写习惯,加深对语言和系统的理解。其实作为动态语言的python依旧可以作为超大工程的编程语言的。好了,闲话不多扯。本文主要针对原因1进行“补救”,做了一个C++加速python模块的实验,想测试如果python的部分函数被C++改写,会对整个python系统提升多少

木盏之前在实验室的研究方向之一就是硬件加速,其实硬件加速的思想和用C++加速python的思想一样,只有一个法则:将经常使用且费时的函数拿底层语言写成“算子”(即一个黑箱),高层语言只需往黑箱里传参然后获得结果即可


实验准备:Python 2.7/3, g++, linux

先写一个C++函数:

#include<iostream>
#include<string>
using namespace std;
extern "C"{
int cm(int n){
int cm=0;
int i;
for(i=1;i<=n;++i){
        cm += i;
        cm -= i;
	}
return(cm);
} 
}

编写完以后记得用g++编译一下:

g++ -o cm.so -shared -fPIC cm.cpp

想要被python调用,C++的函数一定要用extern修饰。 上面这个函数cm又+i又-i的,啥也没做,输出结果一定是0。但是,这个函数的时间复杂度是n,算数运算次数为2n。如果同一个函数用python编写,则可以对比两者的速度。

python代码如下:


import ctypes
from time import time
cpp = ctypes.CDLL('./cm.so')
 
def cm(n):
	res = 0
	for i in range(n+1):
		res += i
		res -= i
	return res
 
if __name__ == '__main__':
    num = 1000000
    s1 = time()
    print("cpp result = %d" % cpp.cm(num))
    print('cpp time consuming: ', time()-s1)
 
    s2 = time()
    print('python result:%d' % cm(num))
    print('python time consuming: ', time()-s2)

运行结果:

我们可以发现,被c++加速过的python程序速度提高了十几倍

扫描二维码关注公众号,回复: 9321499 查看本文章

总结

Python目前使用的领域越来越多,经常会凸显一些计算速度不足的问题,别动不动就升级硬件来缓解速度问题。Python作为一种动态语言,对于传入参数和返回值的数据类型是不明确的,或者说只有拿到参数的那一刻才知道给参数分配多大的空间。这样势必会导致运算速度的降低!所以,对于算术运算比较多的函数,please使用C++来编写。随便举个例子,你是否还在用python逐像素点处理图片?

发布了147 篇原创文章 · 获赞 1858 · 访问量 90万+

猜你喜欢

转载自blog.csdn.net/leviopku/article/details/97917918