tutorial python c go cython

tutorial - Escribir una extensión de Python en Go(Golang)



cython youtube (4)

Actualmente uso Cython para vincular C y Python, y obtener velocidad en bits lentos de código python. Sin embargo, me gustaría usar goroutines para implementar un bit de código realmente lento (y muy paralelo), pero debe ser ejecutable desde python. (Ya he visto esta pregunta )

Estoy (algo así como) feliz de ir a través de C (o Cython) para configurar estructuras de datos, etc., si es necesario, pero evitar esta capa adicional sería bueno desde un punto de vista de corrección / evitación de errores.

¿Cuál es la forma más simple de hacer esto sin tener que reinventar ninguna rueda?


Hay un paquete de go-python precisamente para ayudarlo a escribir extensiones de Python en Go:

este paquete proporciona un ejecutable "go-python" que simplemente carga "python" y luego llama a python.Py_Main (os.Args). el ser racional que bajo ese ejecutable, ir a las extensiones basadas en C-Python sería más fácil de implementar (ya que esto generalmente significa llamar a ir desde C a través de algunas funciones más complicadas)


He escrito una extensión para setuptools que te permite escribir extensiones cpython que interactúan con go: https://github.com/asottile/setuptools-golang

Hay un par de extensiones de ejemplo aquí:

Lo bueno es que pueden instalarse como cualquier otro paquete pip y son compatibles con cpython y pypy.

Las ruedas PEP 513 manylinux1 también se pueden fabricar para proporcionar ruedas setuptools-golang-build-manylinux-wheels través de la setuptools-golang-build-manylinux-wheels .

El enfoque es casi idéntico al de la respuesta de @ ColonelPanic, pero utiliza algunos trucos adicionales para habilitar la compatibilidad de python2 + python3.



Lamentablemente, esto no es posible actualmente. Go puede ejecutar código C (y ese código C puede volver a llamar a Go), pero la función main debe estar en Go , por lo que el tiempo de ejecución Go puede configurarse.