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ół?
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.
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ć.
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)
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.
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