Ich habe eine Express Node.js-Anwendung, aber ich habe auch einen Algorithmus für maschinelles Lernen, der in Python verwendet werden kann. Gibt es eine Möglichkeit, Python-Funktionen aus meiner Node.js-Anwendung aufzurufen, um die Leistungsfähigkeit von Bibliotheken für maschinelles Lernen zu nutzen?
206
node-python
scheint es sich um ein aufgegebenes Projekt zu handeln.Antworten:
Der einfachste Weg, den ich kenne, ist die Verwendung des Pakets "child_process", das im Lieferumfang des Knotens enthalten ist.
Dann können Sie so etwas tun wie:
Dann müssen Sie nur noch sicherstellen, dass Sie
import sys
in Ihrem Python-Skript sind, und dann können Sie mitarg1
usingsys.argv[1]
,arg2
usingsys.argv[2]
usw. darauf zugreifen .Um Daten an den Knoten zurückzusenden, gehen Sie im Python-Skript wie folgt vor:
Und dann kann der Knoten auf Daten warten, indem er:
Da auf diese Weise mehrere Argumente mithilfe von Spawn an ein Skript übergeben werden können, können Sie ein Python-Skript so umstrukturieren, dass eines der Argumente entscheidet, welche Funktion aufgerufen werden soll, und das andere Argument an diese Funktion usw. übergeben wird.
Hoffe das war klar. Lassen Sie mich wissen, wenn etwas geklärt werden muss.
quelle
exec
ist, dass es einen Puffer anstelle eines Streams zurückgibt. Wenn Ihre Daten diemaxBuffer
Einstellung überschreiten , die standardmäßig 200 KB beträgt, erhalten Sie eine Pufferüberschreitungsausnahme und Ihr Prozess wird beendet. Daspawn
Streams verwendet werden, ist es flexibler alsexec
.Beispiel für Personen mit Python-Hintergrund, die ihr Modell für maschinelles Lernen in die Anwendung Node.js integrieren möchten:
Es verwendet das
child_process
Kernmodul:Es ist kein
sys
Modul in Ihrem Python-Skript erforderlich .Im Folgenden finden Sie eine modularere Methode zum Ausführen der Aufgabe mit
Promise
:quelle
Das
python-shell
Modul vonextrabacon
ist eine einfache Möglichkeit, Python-Skripte von Node.js mit einfacher, aber effizienter Kommunikation zwischen Prozessen und besserer Fehlerbehandlung auszuführen.Installation :
npm install python-shell
.Ausführen eines einfachen Python-Skripts:
Ausführen eines Python-Skripts mit Argumenten und Optionen:
Die vollständige Dokumentation und den Quellcode finden Sie unter https://github.com/extrabacon/python-shell
quelle
Sie können jetzt RPC-Bibliotheken verwenden, die Python und Javascript unterstützen, z. B. zerorpc
Von ihrer Titelseite:
Node.js Client
Python Server
quelle
Die meisten früheren Antworten nennen den Erfolg des Versprechens im Ein ("Daten"), es ist nicht der richtige Weg, dies zu tun, denn wenn Sie viele Daten erhalten, erhalten Sie nur den ersten Teil. Stattdessen müssen Sie dies beim Endereignis tun.
Anruf:
Python:
quelle
Ich bin auf Knoten 10 und untergeordneter Prozess
1.0.2
. Die Daten von Python sind ein Byte-Array und müssen konvertiert werden. Nur ein weiteres kurzes Beispiel für eine http-Anfrage in Python.Knoten
request.py
ps ist kein erfundenes Beispiel, da das http-Modul des Knotens nicht einige Anforderungen lädt, die ich stellen muss
quelle
Sie könnten Ihre Python nehmen, transpilieren und dann so aufrufen, als wäre es Javascript. Ich habe dies erfolgreich für Screeps gemacht und es sogar im Browser a la Brython laufen lassen .
quelle
Das hat bei mir funktioniert. Ihre python.exe muss Ihnen Pfadvariablen für dieses Code-Snippet hinzugefügt werden. Stellen Sie außerdem sicher, dass sich Ihr Python-Skript in Ihrem Projektordner befindet.
quelle