目前我使用Cython将C和Python链接起来,在Python代码的慢部分中获得加速。然而,我想使用goroutines实现一个非常缓慢(且非常可并行化)的代码块,但必须可以从Python调用。(我已经看到了这个问题)
如果有必要,我(有点)乐意通过C(或Cython)设置数据结构等,但从错误修复/避免的角度来看,避免这个额外的层会更好。
没有重复造轮子,最简单的方法是什么?
另请参见 https://github.com/go-python/gopy
gopy
可以从一个 go 包生成 CPython 扩展模块。
很遗憾,目前还不可能。Go语言可以运行C代码(这些C代码可以回调到Go语言),但是main
函数必须是在Go语言中,这样Go运行时才能设置好一些东西。
我编写了一个扩展程序,可以让您编写与go交互的cpython扩展,它是setuptools的一部分: https://github.com/asottile/setuptools-golang
这里有几个示例扩展:
这些东西可以像其他pip
包一样安装,并支持cpython和pypy。
PEP 513 manylinux1轮也可以通过setuptools-golang-build-manylinux-wheels
工具构建,提供预构建的轮。有一个名为go-python的包,专门帮助您在Go中编写Python扩展:
该包提供了一个可执行文件 "go-python",它只是加载"python"并调用python.Py_Main(os.Args)。其理由是,在这样的可执行文件下,基于Go的C-Python扩展将更容易实现(因为这通常意味着通过一些相当复杂的函数跳跃从C调用到Go)。
go-python
可以帮助你从 Go 中调用 Python,而不是相反。 - zneak