Mam aplikację Express Node.js, ale mam również algorytm uczenia maszynowego do użycia w języku Python. Czy istnieje sposób, w jaki mogę wywoływać funkcje Python z mojej aplikacji Node.js, aby korzystać z możliwości bibliotek uczenia maszynowego?
208
node-python
wydaje się być porzuconym projektem.Odpowiedzi:
Najłatwiejszy sposób, jaki znam, to użycie pakietu „child_process” dostarczanego z węzłem.
Następnie możesz zrobić coś takiego:
Następnie wszystko, co musisz zrobić, to upewnić się, że masz
import sys
w swoim skrypcie python, a następnie możesz uzyskać dostęparg1
za pomocąsys.argv[1]
,arg2
za pomocąsys.argv[2]
i tak dalej.Aby wysłać dane z powrotem do węzła, wykonaj następujące czynności w skrypcie python:
A następnie węzeł może nasłuchiwać danych za pomocą:
Ponieważ pozwala to na przekazanie wielu argumentów do skryptu za pomocą spawn, możesz zrestrukturyzować skrypt Pythona, aby jeden z argumentów decydował, którą funkcję wywołać, a drugi argument zostanie przekazany do tej funkcji itp.
Mam nadzieję, że to było jasne. Daj mi znać, jeśli coś wymaga wyjaśnienia.
źródło
exec
tym, że zwraca bufor zamiast strumienia, a jeśli twoje dane przekraczająmaxBuffer
ustawienie, które domyślnie wynoszą 200kB, otrzymujesz wyjątek przekroczony przez bufor i twój proces zostaje zabity. Ponieważspawn
używa strumieni, jest bardziej elastyczny niżexec
.Przykład dla osób wywodzących się z języka Python i chcących zintegrować swój model uczenia maszynowego z aplikacją Node.js:
Wykorzystuje
child_process
moduł podstawowy:Nie wymaga
sys
modułu w skrypcie Python.Poniżej znajduje się bardziej modułowy sposób wykonywania zadania przy użyciu
Promise
:źródło
python-shell
Modułemextrabacon
to prosty sposób na uruchamianie skryptów Pythona z node.js z basic, ale sprawna komunikacja między procesami i lepsze obsługa błędów.Instalacja:
npm install python-shell
.Uruchamianie prostego skryptu Python:
Uruchamianie skryptu Python z argumentami i opcjami:
Aby uzyskać pełną dokumentację i kod źródłowy, sprawdź https://github.com/extrabacon/python-shell
źródło
Możesz teraz używać bibliotek RPC, które obsługują Python i JavaScript, takich jak zerorpc
Z ich pierwszej strony:
Klient Node.js
Serwer Python
źródło
Większość wcześniejszych odpowiedzi nazywa powodzenie obietnicy włączonej („dane”), nie jest to właściwy sposób, aby to zrobić, ponieważ jeśli otrzymasz dużo danych, dostaniesz tylko pierwszą część. Zamiast tego musisz to zrobić na zdarzeniu końcowym.
Połączenie:
pyton:
źródło
Jestem na węźle 10 i proces potomny
1.0.2
. Dane z Pythona są tablicą bajtów i muszą zostać przekonwertowane. Kolejny szybki przykład wysyłania żądania http w pythonie.węzeł
request.py
ps nie jest wymyślonym przykładem, ponieważ moduł http węzła nie ładuje kilku żądań, które muszę wykonać
źródło
Możesz wziąć swój python, przetransponować go, a następnie wywołać tak, jakby to był javascript. Zrobiłem to z powodzeniem dla piargów, a nawet uruchomiłem w przeglądarce a la brython .
źródło
To zadziałało dla mnie. Twój python.exe musi zostać dodany do zmiennych ścieżek dla tego fragmentu kodu. Upewnij się także, że skrypt Pythona znajduje się w folderze projektu.
źródło