Ограничение количества вызовов функции
Доброго времени суток.
Недавно начал знакомиться с 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, время: 13:00. |