Go 怎么调用 Python?或者说 Python 怎么嵌入到 Go?—— 我要研究明白。
- 方案 1:go -- RESTFul -- python
- 需要用户起一个 python 进程的 http server 进程,并且定义 RESTFul API。
- 方案 2:go -- rpc -- python
- 可用 grpc 或其他 rpc,也是需要单独启动一个 python 进程并开启 rpc server,go 中代码作为 rpc client。
- 方案 3:go -- cgo/内存共享 -- python(C-API)
- python 的解释器绝大多数人都是使用官方的 CPython,内核和解释器是用 C 实现的,可以用 C 代码方便的调用。
- go 又和 C 是天然搭档,通过标准库中的 cgo 组件可以无缝调用 C。
- 此时 python core 作为动态库链接到 go 上。
RESTFul 和 RPC 都是网络调用方式,更适合高度解耦的场景,cgo 或直接内存共享则是效率优先。 —— 我打算先摸索一下方案 3。一通搜索,找到了一些好文章,再加上 10 天左右的实战摸索,总结以下要点:
下面依次展开描述图中 1、2、3: