node.js在子进程中运行函数?

问题描述:

我有一个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子进程,但没有指定“节点”作为可执行文件?

+0

你有这种方法的特殊问题吗?这是启动一个新进程的几种方法之一('.spawn()'和'.exec()'是相似的)。我可以告诉你,你的'throw error'没有什么用处,因为抛出一个常规的异步回调不能被捕获到任何有用的地方,所以它与'return'不同。 – jfriend00

+0

您的长时间运行的进程是CPU限制还是IO限制?这个问题的答案在确定使用什么方法时非常重要。 – JLRishe

+0

我基于上面的代码,我有一个例子。我希望避免不得不明确引用“节点”命令,但如果这不是问题,那么我很好。至于CPU/IO,这是一个视频转换过程,很可能两者都有。尽管如此,我现在看到视频转换过程实际上是在引发一个外部过程(ffmpeg),所以我可能不需要担心分叉(我以为它使用的是库)。 –

刚才看到node.js提供了'fork'函数,对于执行模块,尽管它们需要被写入,就好像它们正在等待命令行参数一样,处理了process.argv数组。

命令调用中:

child_process.fork(modulePath[, args][, options]) 

更多细节here

在我的具体情况分叉可能没有意义,因为已经有一个叉由我正在使用的node.js库。

+0

每个单独的消息是否与另一个完全隔离?即如果我发送两个消息给子进程fork,它们是否会完全独立运行? – narruc