虽然python优点很多,但是有一个致命的缺点就是运行速度太慢,那么python程序需要一些计算量比较大的模块时一般会调用c或者c++的代码来重写,但是c/c++编写代码代价太高,耗费太多的人力。那么就想到来一个折中的方法是用golang语言。
虽然golang性能比不上c,但是golang天生的高并发,以及编译速度超级快,而且还自带来垃圾回收机制,不用开发者自己去管理内存,开发效率高。所以在python程序遇到大计算量时,可以考虑调用go模块。
下面来看下如何构建一个go python 模块:
package main import "fmt" import "C" //export test //指定那些函数能被外部调用 func test(){ //test函数循环1000000 次 for a := 0; a < 1000000; a++ { fmt.Printf("a 的值为: %d\n", a) } } func main(){ fmt.Println("hello world") test() }
编译生成动态链接库,生成的.so文件可以被python加载并调用
go build -buildmode=c-shared -o hello.so src/hello.go
python 中调用go模块,并统计两个模块循环一百万次的时间,查看下go跟python执行效率
# coding=utf-8 import time from ctypes import CDLL def xu(): for i in range(0,1000000): print(u"a 的值为: %d\n"%i) if __name__ =="__main__": py_start = time.time() xu() py_end = time.time() lib = CDLL('./hello.so') #调用go模块 start = time.time() lib.test() go = time.time()-py_end print("go",go) py = py_end-py_start print("python",py) print('速度对比:%f'%(py/go))
单从循环一百万次来看,go的效率要高2倍多。