Pisanie rozszerzenia Pythona w Go (Golang)

Obecnie używam Cythona do łączenia C i Pythona i uzyskiwania szybkości w wolnych bitach kodu Pythona. Chciałbym jednak użyć goroutines do zaimplementowania bardzo wolnego (i bardzo równoległego) fragmentu kodu, ale musi on być wywoływalny z Pythona. (Już widziałem to pytanie )

Jestem (w pewnym sensie) szczęśliwy przechodząc przez C (lub Cython), aby skonfigurować struktury danych itp., Jeśli to konieczne, ale unikanie tej dodatkowej warstwy byłoby dobre z punktu widzenia naprawy/unikania błędów.

Co jest najprostsze sposób, aby to zrobić bez konieczności odkrywania na nowo żadnych kół?

Author: Community, 2012-09-16

4 answers

Aktualizacja 2015 : możliwa od wersji Go 1.5 https://blog.filippo.io/building-python-modules-with-go-1-5/

Z Go 1.5 można budować. so obiekty i importować je jako moduły Pythona, uruchamiając Go kod (zamiast C) bezpośrednio z Pythona.

 35
Author: Colonel Panic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-27 21:29:39

Niestety, obecnie nie jest to możliwe. Go może uruchomić kod C (a ten kod C może następnie wywołać z powrotem do Go), ale main funkcja musi być w Go , aby runtime Go mogło wszystko skonfigurować.

 10
Author: Russ Amos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-16 01:39:45

Istnieje pakiet go-python, który pomoże Ci pisać rozszerzenia Pythona w Go:

Ten pakiet dostarcza wykonywalny "go-python", który po prostu ładuje "python", a następnie wywołaj python. Py_Main (os. Args). istota racjonalna że pod takim programem wykonywalnym rozszerzenia oparte na C-Pythonie będą być łatwiejsze do wdrożenia (ponieważ zwykle oznacza to wywołanie go z C przez niektóre dość zawiłe funkcje)

 3
Author: uriel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 21:36:14

Napisałem rozszerzenie do setuptools, które pozwala na pisanie rozszerzeń cpython interfejsu z go: https://github.com/asottile/setuptools-golang

Jest tu kilka przykładowych rozszerzeń:

Najciekawsze jest to, że można je zainstalować tak jak każdy inny pip pakiet i obsługiwać zarówno cpython jak i pypy.

PEP 513 koła manylinux1 można również zbudować, aby zapewnić wstępnie zbudowane koła za pomocą narzędzia setuptools-golang-build-manylinux-wheels.

Podejście jest prawie identyczne jak w odpowiedzi @ ColonelPanic, ale wykorzystuje kilka dodatkowych sztuczek, aby umożliwić zgodność z python2 + python3.

 1
Author: Anthony Sottile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 05:52:20