如何将node.js模块作为node.js程序的子进程执行?

如何将node.js模块作为node.js程序的子进程执行?,node.js,nonblocking,Node.js,Nonblocking,这是我的问题。我实现了一个小脚本,作为node.js模块执行一些繁重的计算。所以,如果我输入“node myModule.js”,它会计算一秒钟,然后返回一个值。 现在,我想使用我的主Node.JS程序中的模块。我可以将所有计算放在“doSomeCalculation”函数中,然后执行以下操作: var myModule = require("./myModule"); myModule.doSomeCalculation(); 但这会造成阻塞,因此情况会很糟糕。我想以一种非阻塞的方式使用它,

这是我的问题。我实现了一个小脚本,作为node.js模块执行一些繁重的计算。所以,如果我输入“node myModule.js”,它会计算一秒钟,然后返回一个值。 现在,我想使用我的主Node.JS程序中的模块。我可以将所有计算放在“doSomeCalculation”函数中,然后执行以下操作:

var myModule = require("./myModule");
myModule.doSomeCalculation();
但这会造成阻塞,因此情况会很糟糕。我想以一种非阻塞的方式使用它,比如说,本地的DB调用。所以我尝试使用child_process.spawn和exec,如下所示:

var spawn = require("child_process").spawn;
var ext = spawn("node ./myModule.js", function(err, stdout, stderr) { /* whatevs */ });
ext.on("exit", function() { console.log("calculation over!"); });
但是,当然,它不起作用。我尝试在myModule中使用EventEmitter,发出“calculationDone”事件,并尝试在上面示例中的“ext”变量上添加关联的侦听器。还是不行

至于叉子,它们并不是我真正想要做的。Forks需要将计算相关的代码放在主程序中,forking,在父程序执行任何操作时在子程序中计算,然后如何返回结果


所以我的问题是:当计算放在节点文件中时,我可以使用子进程进行一些非阻塞计算吗?还是根本不可能?我应该改为用Python脚本进行繁重的计算吗?在这两种情况下,我如何将参数传递给子进程?例如,一个图像?

我想你想要的是API

例如,如果您有以下两个文件:

在main.js中:

var cp = require('child_process');
var child = cp.fork('./worker');

child.on('message', function(m) {
  // Receive results from child process
  console.log('received: ' + m);
});

// Send child process some work
child.send('Please up-case this string');
在worker.js中:

process.on('message', function(m) {
  // Do work  (in this case just up-case the string
  m = m.toUpperCase();

  // Pass results back to parent process
  process.send(m.toUpperCase(m));
});
然后运行main(并为worker.js代码生成子worker进程…)


无论您将作为子节点使用什么(节点、Python等等),节点都不关心。只需确保在完成所有操作并将结果写入标准输出后,计算脚本退出即可


它不起作用的原因是您正在使用而不是。

下午好?可能是早上(甚至更糟!)在其他地方:)调用最好是
cp.fork(uu dirname+'/worker')main.js
,则可以使用code>。
$ node --version
v0.8.3

$ node main.js 
received: PLEASE UP-CASE THIS STRING