Writing a Python extension in Go (Golang)

前端 未结 4 1652
一整个雨季
一整个雨季 2020-12-12 20:58

I currently use Cython to link C and Python, and get speedup in slow bits of python code. However, I\'d like to use goroutines to implement a really slow (and very paralleli

相关标签:
4条回答
  • 2020-12-12 21:03

    Update 2015: possible as of Go 1.5 https://blog.filippo.io/building-python-modules-with-go-1-5/

    with Go 1.5 you can build .so objects and import them as Python modules, running Go code (instead of C) directly from Python.

    0 讨论(0)
  • 2020-12-12 21:09

    There is a go-python package precisely to help you write Python extensions in Go:

    this package provides an executable "go-python" which just loads "python" and then call python.Py_Main(os.Args). the rational being that under such an executable, go based extensions for C-Python would be easier to implement (as this usually means calling into go from C through some rather convoluted functions hops)

    0 讨论(0)
  • 2020-12-12 21:11

    Unfortunately, this is not currently possible. Go can run C code (and that C code can then call back into Go), but the main function has to be in Go, so the Go runtime can set things up.

    0 讨论(0)
  • 2020-12-12 21:27

    I've written an extension to setuptools which allows you to write cpython extensions that interface with go: https://github.com/asottile/setuptools-golang

    There's a couple example extensions here:

    • https://github.com/asottile/setuptools-golang-examples
    • https://github.com/asottile/dockerfile

    The neat thing is these can be installed just like any other pip package and support both cpython and pypy.

    PEP 513 manylinux1 wheels can also be built to provide pre-built wheels via the setuptools-golang-build-manylinux-wheels tool.

    The approach is nearly identical to the one in @ColonelPanic's answer but uses some additional tricks to enable python2 + python3 compatibility.

    0 讨论(0)
提交回复
热议问题