python 程序中调用go

虽然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倍多。

猜你喜欢

转载自www.cnblogs.com/huangguifeng/p/8931837.html