Cela ressemble à un scénario dans lequel zeroMQ serait un bon choix. Il s'agit d'un cadre de messagerie similaire à l'utilisation de sockets TCP ou Unix, mais il est beaucoup plus robuste ( http://zguide.zeromq.org/py:all )
Il existe une bibliothèque qui utilise zeroMQ pour fournir un cadre RPC qui fonctionne plutôt bien. Elle s'appelle zeroRPC ( http://zerorpc.dotcloud.com/ ). Voici le bonjour du monde.
Serveur Python "Hello x" :
import zerorpc
class HelloRPC(object):
'''pass the method a name, it replies "Hello name!"'''
def hello(self, name):
return "Hello, {0}!".format(name)
def main():
s = zerorpc.Server(HelloRPC())
s.bind("tcp://*:4242")
s.run()
if __name__ == "__main__" : main()
Et le client node.js :
var zerorpc = require("zerorpc");
var client = new zerorpc.Client();
client.connect("tcp://127.0.0.1:4242");
//calls the method on the python object
client.invoke("hello", "World", function(error, reply, streaming) {
if(error){
console.log("ERROR: ", error);
}
console.log(reply);
});
Ou vice-versa, serveur node.js :
var zerorpc = require("zerorpc");
var server = new zerorpc.Server({
hello: function(name, reply) {
reply(null, "Hello, " + name, false);
}
});
server.bind("tcp://0.0.0.0:4242");
Et le client python
import zerorpc, sys
c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
name = sys.argv[1] if len(sys.argv) > 1 else "dude"
print c.hello(name)
3 votes
Bonjour, pourriez-vous nous dire ce que vous avez choisi et comment cela a fonctionné pour vous ? Il y a des bibliothèques en Python que nous aimons tous utiliser tout en gardant les options de performance et de non-blocage. Merci
0 votes
Pourquoi ne pas simplement créer un processus et communiquer par le biais de l'entrée-sortie du système, comme le suggère cette proposition : sohamkamani.com/blog/2015/08/21/python-nodejs-comm ?
1 votes
Il existe une nouvelle bibliothèque de transition appelée PyNode qui vous permet d'appeler Python et d'obtenir des types JS en retour. La démonstration est faite ici thecodinginterface.com/blog/
0 votes
Pour ceux qui trouvent ceci sur Google à la caisse github.com/extremeheat/JSPyBridge comme expliqué dans cette réponse séparée : stackoverflow.com/a/68427624/11173996