在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,它只是说明了做类似的任务是多么的简单)。