0
У меня есть менеджер загрузок, который будет загружать файлы с queue[]
в каждый отдельный дочерний процесс wget
.Обработка нескольких дочерних процессов в node.js
Однако после завершения загрузки и обратного вызова мне нужно обрабатывать queue[i]
, но я не знаю, какой индекс очереди это.
const EXEC_FILE = require('child_process').execFile; /** https://nodejs.org/api/child_process.html */
queue = []; /** array with download urls */
function startDownload(i){
var downloadProccess = EXEC_FILE(
wget, [ queue[i] ],
(error, stdout, stderr) => {
/** callback after EXEC_FILE completed or aborted */
/** HERE! How do I get the index i? */
});
}
startDownload(1);
startDownload(3);
startDownload(9);
Как получить значение i
после завершения процесса?
ВНИМАНИЕ: многопоточность Node.js не предназначена для использования таким образом. Для вашей задачи асинхронная загрузка будет более эффективной. Попробуйте модуль «запрос» для загрузки в цикле foreach. Чтобы быть более надежным, вы можете использовать запрос-обещание вместе с модулем bluebird. Эта ссылка поможет, попробуйте в цикле: http://stackoverflow.com/a/11944984/3359432 –
@NidhinDavid Я не могу найти ничего плохого в этом подходе: Разгрузка тяжелых задач из основного процесса , Не могли бы вы немного рассказать о том, как его использовать, если я что-то пропустил? –
@ code-jaff Многопоточность в Node.js не похожа на другие языки программирования. Infact, когда вы «многопоточно» его spwaning и весь новый экземпляр процесса Node.js. Вы можете общаться только между ними, используя передачу сообщений. И что касается Node.js, задачи, связанные с IO, не являются тяжелыми. Node.js точно подходит для таких задач. Если бы это была обработка изображений, я бы согласился с вами, даже тогда лучшим вариантом является создание «аддона» в C++, а не разгрузка. он дает больше контроля. –