在Go(Golang)中编写Python扩展

teh*_*rus 44 c python go cython

我目前使用Cython链接C和Python,并在慢速的python代码中获得加速.但是,我想使用goroutine来实现一个非常慢(并且非常可并行化)的代码,但它必须可以从python中调用.(我已经看过这个问题)

我(在某种程度上)乐意通过C(或用Cython)去,如果需要建立数据结构等,但避免这种额外的层将是从一个bug修复/避让点好.

无需重新发明轮子,最简单的方法是什么?

Col*_*nic 38

2015年更新:从Go 1.5开始可能https://blog.filippo.io/building-python-modules-with-go-1-5/

使用Go 1.5,您可以构建.so对象并将它们作为Python模块导入,直接从Python运行Go代码(而不是C).

  • gopy目前与Go> = 1.6不兼容,因此这是短暂的. (4认同)
  • github.com/go-python/gopy项目使这个非常容易,为博客文章提到的所有必要的管道创建. (2认同)
  • gopy 已更新以支持较新版本的 Go。它使用“c-shared”构建选项和 pybindgen 项目 (2认同)

Rus*_*mos 10

不幸的是,这目前还不可行.Go可以运行C代码(然后C代码可以回调到Go),但是main函数必须在Go中,所以Go运行时可以设置.

  • 您可以使用套接字来执行RPC. (2认同)
  • 将Python嵌入到C程序中相当容易.我想知道你是否可以将C程序嵌入到Go程序中...... Python和Go交互必须通过C层. (2认同)
  • 对于Go和Python进程之间的通信,你可以在不同的进程中运行Python程序并使用stdin,stdout在进程之间进行通信(包os/exec).JSON比XMLRPC更好,因为目前在Go中使用XML比使用JSON更难. (2认同)
  • 现在可以使用Go 1.5 - 有关工作示例,请参阅https://github.com/jbuberel/buildmodeshared. (2认同)