Python 有一个好搭档就是 C/C++,Python 提供生产力,C/C++ 则负责效率。
这篇文章探讨 Python + Go 混合开发的可能性。
如何实现
最理想的状态当然是用 Go 的方式开发功能,然后用 Python 的方式来调用,不需要哪一方来做适配,也不需要在中间做太多转换之类的工作。
但这应该很难实现。
我想到的,最直接,最简单,可能也是最无痛的方式,就是是通过 C 库方式来实现:
-
直接将 Go 模块编译成库文件:
go build -buildmode=c-shared -o libmodule.so main.go
-
然后 Python 方面通过 ctypes 来调用,将需要用到的调用简单封装一下。
import ctypes lib = ctypes.CDLL('./libmodule.so') lib.hello()
性能测试
我的方法是采用 google/uuid 包,比较:
- Go 包
- Python uuid 包(底层是 C 写的 _uuid)
- C 调用 Go 包
- Python 调用 Go 包
在我的老本子上各执行十万次,最后的结论是 0.19 秒,0.36 秒,0.75 秒,0.79 秒。
这个数据不具备参考价值,很可能是我自己的水平问题,我并不擅长做 C 拓展和混合开发。
只能说明,以我现在的水平,不到万不得已,不要在正式项目中采用混合开发。