Ограничение количества вызовов функции
Доброго времени суток.
Недавно начал знакомиться с Node, разумеется, возникли проблемы с асинхронностью... Необходимо пройти по элементам массива (2 - 3 тысячи) и обработать каждый элемент с помощью внешних скриптов (pars.parsRo/python pdf_adn_json.py). const {exec} = require('child_process'); var pars = require("./roParser.js"); ... async.each(line, function(element){ fullPathXrd.length=0; fullPathXrd=localPath+element.proc; async.waterfall([ function(callback){ if ((element.action!="D") && (fs.existsSync(fullPathXrd))){ if(fullPathXrd.lastIndexOf(".ro")===fullPathXrd.length-3){ pars.parsRo(fullPathXrd, callback); } if(fullPathXrd.lastIndexOf(".pdf")===fullPathXrd.length-4){ exec('python pdf_adn_json.py '+fullPathXrd, callback); } }else{ callback(null, 'fileNotExist'); } }, ... При запуске, скрипт вызывает около тысячи процессов (пока машина не будет загружена полностью). Думаю, что это как-то неправильно... Подскажите, пожалуйста, можно ли ограничить количество запусков внешних функций? Если можно, то как? Заранее спасибо. |
Здравствуйте.
Вы используете модуль async, в нем есть очередь. const WORKERS_COUNT = 10; const queue = async.queue((element, done) => { fullPathXrd.length=0; fullPathXrd=localPath+element.proc; async.waterfall([ function(callback){ if ((element.action!="D") && (fs.existsSync(fullPathXrd))){ if(fullPathXrd.lastIndexOf(".ro")===fullPathXrd.length-3){ pars.parsRo(fullPathXrd, callback); } if(fullPathXrd.lastIndexOf(".pdf")===fullPathXrd.length-4){ exec('python pdf_adn_json.py '+fullPathXrd, callback); } }else{ callback(null, 'fileNotExist'); } }, ... ], function(err, result) { done(err, result) }); }, WORKERS_COUNT); async.each(line, function(element){ queue.push(element, callback); }); |
EmperioAf, большое спасибо.
Вопрос решен. |
Часовой пояс GMT +3, время: 06:27. |