因为想要优化代码中的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
$ 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
运行上面代码(要修改一下)可以看到如下结果,速度是快了很多。这个网页排版感觉有问题,不知道直接粘贴能不能运行,可能排版会出错。
上一篇文章还有提到关于读取文件的加速,尝试了多线程,然后发现变慢了………………开始以为自己技术菜没写好,后来发现确实是这样。没有用的代码虽然是实现了多线程,这里还是不贴出来了,伤心。
引用别人一句话 :读取磁盘,属于快速设备,就算用 C 多线程读也比单线程慢,因为少有并发的可能,而线程切换的代价反而高得多。
开了4个线程读取数据,在本地电脑速度慢了接近4倍,远端的电脑可能CPU好一些慢了2倍,白忙活了。
参考文献:http://blog.csdn.net/ablo_zhou/article/details/5250766
http://www.zhihu.com/question/28127613/answer/39509912