У меня есть приложение node.js, которое получает файл через веб-запрос, а затем применит процесс преобразования к этому файлу. Поскольку задача длительная, это необходимо выполнить отдельно от основного потока.Функция node.js run в дочернем процессе?
На данный момент я только что назвал необходимый код с помощью вызова 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» не делает ничего полезного, поскольку бросать обычный асинхронный обратный вызов нельзя найти где-нибудь полезным, поэтому он ничего не делает, кроме 'return'. – jfriend00
Является ли ваш долговременный процесс привязанным к процессору или привязанным к IO? Ответ на этот вопрос очень важен для определения того, какой подход к использованию. – JLRishe
Я основывал вышеуказанный код на примере, который у меня был. Я надеялся избежать явной ссылки на команду «node», но если это не рассматривается как проблема, тогда я в порядке. Что касается CPU/IO, это процесс преобразования видео, поэтому, вероятно, немного того и другого. Хотя, теперь я вижу, что процесс преобразования видео на самом деле порождает внешний процесс (ffmpeg) под капотом, поэтому мне может не понадобиться беспокоиться о forking (я думал, что он использует библиотеку). –