用cython加速python

因为想要优化代码中的numpy部分,所以选择了cython。

贴一个简单的教程吧,numpy部分优化不成功,就快了10%左右,可能是技术菜。

#test.pyx
def c_compute():
	cdef int i,j
	cdef int n
	for i in range(10000):
		for j in range(10000):
			n+=1
	return n

$ cython test.pyx    会得到test.c文件

$ gcc -c -fPIC -I /usr/include/python2.7 test.c   得到test.o文件

$ gcc -shared test.o -o test.so   得到test.so文件

<pre name="code" class="python" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;"><pre name="code" class="python"><pre name="code" class="python"><pre name="code" class="python">import test
from time import time
def compute():
    n=0
    for i in xrange(10000):
        for j in xrange(10000):
            n+=1
    print n
if __name__ == '__main__':
       time1 = time()   
       a = test.c_compute()
       print a
       #compute()
       time2 = time()
       print 'the running time is:',time2-time1

 
 
 
 
 
 
 
 

运行上面代码(要修改一下)可以看到如下结果,速度是快了很多。这个网页排版感觉有问题,不知道直接粘贴能不能运行,可能排版会出错。

用cython加速python_第1张图片

上一篇文章还有提到关于读取文件的加速,尝试了多线程,然后发现变慢了………………开始以为自己技术菜没写好,后来发现确实是这样。没有用的代码虽然是实现了多线程,这里还是不贴出来了,伤心。

引用别人一句话 :读取磁盘,属于快速设备,就算用 C 多线程读也比单线程慢,因为少有并发的可能,而线程切换的代价反而高得多。

开了4个线程读取数据,在本地电脑速度慢了接近4倍,远端的电脑可能CPU好一些慢了2倍,白忙活了。


参考文献:http://blog.csdn.net/ablo_zhou/article/details/5250766

http://www.zhihu.com/question/28127613/answer/39509912  


你可能感兴趣的:(cython)