这是我的问题。我实现了一个作为node.js模块的进行一些重计算的小脚本。所以,如果我输入“node myModule.js”,它会计算一秒钟,然后返回一个值。 现在,我想从我的主要Node.JS程序中使用该模块。我可以将所有的计算都放在一个“doSomeCalculation”函数中,然后执行:
var myModule = require("./myModule");
myModule.doSomeCalculation();
但这样会阻塞,所以不好。我想以非阻塞的方式使用它,例如像原生的数据库调用一样。因此我尝试使用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”变量上添加相关监听器。但仍然不起作用。
至于分叉,它们并不是我想做的事情。分叉需要将与计算相关的代码放在主程序中,进行分叉,在子进程中进行计算,而父进程则执行其任务,那么如何返回结果呢?
所以这是我的问题:当计算被放入一个Node文件中时,我能否使用子进程进行一些非阻塞计算,或者这是不可能的?我应该在Python脚本中进行繁重的计算吗?在两种情况下,如何将参数传递给子进程-例如,一个图像?