Я использую метод очереди async для очереди задач. Я установил параллелизм на 20. У меня осталось чуть более 2100 задач, но когда очередь достигает 20, она перестает обрабатывать больше задач. Вот что у меня есть:Node.js - async.queue() - Как завершить задачу, чтобы позволить больше запускать?
syncrequest = require('sync-request');
o.getObj = function(site, link){
global.task.comment(site, 'Pulling page ' + link, function(){});
try{
q.push({url: link}, function(){
console.log("processed" + link);
});
}catch(e){
console.log(e);
}
}
var q = async.queue(function(task, callback){
var body = syncrequest('GET', base+'/'+task.url).getBody();
$$$ = cheerio.load(body);
var obj = {
title: $$$('#title').text(),
link: task.url,
};
$$$ = null;
objs.push(obj);
return;
},20);
Обратный вызов console.log("processed" + link);
никогда не получает называется, поэтому я предполагаю, что он думает, что задача по-прежнему работает. Я протоколирование общее количество объектов и количество объектов, толкнул на setInterval
и журналы:
app-0 (out): 2210 ... 3
app-0 (out): 2210 ... 6
app-0 (out): 2210 ... 9
app-0 (out): 2210 ... 12
app-0 (out): 2210 ... 15
app-0 (out): 2210 ... 18
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
app-0 (out): 2210 ... 20
...
Должен ли я делать что-то, чтобы официально завершить задачу, чтобы очистить место для другого?
Ну, ваши задачи никогда не называют 'callback' ?! – Bergi
@ Bergi Ах, черт возьми. Значит, ты прав! – Jordan
На самом деле ваши задачи не выглядят очень асинхронными. Почему вы используете 'async' вообще вместо цикла' for'? – Bergi