我有一个node.js应用程序通过web请求接收文件,然后将转换过程应用到此文件。由于该任务长时间运行,因此需要与主线程分开运行。node.js在子进程中运行函数?
目前我刚通过setTimeout()
呼叫调用了必要的代码。为了将主应用程序与转换过程隔离起来,我想将它移出到子进程中,因为它运行时间很长,我想将主代码与正在进行的工作分开(我是否担心得太多?)。目前,我打电话:
const execFile = require('child_process').execFile;
const child = execFile('node', './myModule.js', (error, stdout, stderr) => {
if (error) {
throw error;
}
console.log(stdout);
});
这是在node.js中正确的方法,或者是有仅仅开始与模块和指定PARAMS子进程,但没有指定“节点”作为可执行文件?
你有这种方法的特殊问题吗?这是启动一个新进程的几种方法之一('.spawn()'和'.exec()'是相似的)。我可以告诉你,你的'throw error'没有什么用处,因为抛出一个常规的异步回调不能被捕获到任何有用的地方,所以它与'return'不同。 – jfriend00
您的长时间运行的进程是CPU限制还是IO限制?这个问题的答案在确定使用什么方法时非常重要。 – JLRishe
我基于上面的代码,我有一个例子。我希望避免不得不明确引用“节点”命令,但如果这不是问题,那么我很好。至于CPU/IO,这是一个视频转换过程,很可能两者都有。尽管如此,我现在看到视频转换过程实际上是在引发一个外部过程(ffmpeg),所以我可能不需要担心分叉(我以为它使用的是库)。 –