我有一個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),所以我可能不需要擔心分叉(我以爲它使用的是庫)。 –