这是我的问题。我实现了一个小脚本,它做一些繁重的计算,作为一个 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”变量上添加关联的侦听器。还是不行。
至于叉子,它们并不是我真正想要做的。分叉需要将与计算相关的代码放在主程序中,分叉,在子程序中计算,而父程序执行任何操作,然后我将如何返回结果?
所以这是我的问题:当计算放在节点文件中时,我可以使用子进程进行一些非阻塞计算,还是不可能?我应该在 Python 脚本中进行繁重的计算吗?在这两种情况下,如何将参数传递给子进程 - 例如图像?