在node.js中使用subprocess进行复杂的数据操作

我是新来的node.js和我使用单页面应用程序Node.js的位置。 我必须偶尔做一些非常复杂的数据处理(AI和统计function)。 这些服务是用Python编写的。 我试图找出把这些计算交给subprocess的最好方法,所以我的主线程没有被阻塞,我可以使用丰富的Python库。

我需要能够传递复杂的数据(一个JSON对象是好的)到subprocess和接收复杂的输出(再次JSON对象是理想的)。 引用Node.jsmath计算 – subprocess和复杂数据? ,使用child_process.fork()和.send()另一个node.js进程很简单。

在child_process.spawn()中是否有类似的方法? 或者可以使用.fork()来执行一个python脚本。 我能想出的是如何执行不允许的最简单的参数的系统命令。 即使我可以发送数据,我不清楚如何使用.spawn()接收数据。

我找不到这个答案,但我承认node.js对我来说是新的。

谢谢。

spawn方法返回一个ChildProcess对象,它可以让你访问进程的标准input和标准输出。

它看起来像这样:

 var child = require('child_process').spawn('python', ['script.py']); child.stdout.on('data', function(data) { response = JSON.parse(data); console.log(response); }); child.stdin.write(JSON.stringify(data)); 

正如reptilicus指出的,使用ZeroMQ来集成node.js和Python是一个选项。

在我的答案是一个简单的客户端服务器应用程序通过ZeroMQ通信的例子。 node.js中的客户端部分的实现应该非常相似,存在用于zeromq绑定的node.js,并且node.js端代码的复杂性(或简单性)与Python相当。 (注意,这个链接并没有像在Python中那样提供确切的解决scheme,它只是说明了做类似的任务是多么的简单)。