Node.js - async.queue() - 如何结束任务以允许更多运行?
Node.js - async.queue() - How to end a task to allow more to run?
我正在使用 async 的队列方法对任务进行排队。我将并发设置为 20。我有 2100 多个任务要完成,但是当队列达到 20 时,它会停止处理更多任务。这是我拥有的:
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
...
我应该做些什么来正式完成一项任务,为另一个任务腾出空间吗?
您需要调用回调函数()
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 callback();
},20);
我正在使用 async 的队列方法对任务进行排队。我将并发设置为 20。我有 2100 多个任务要完成,但是当队列达到 20 时,它会停止处理更多任务。这是我拥有的:
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
...
我应该做些什么来正式完成一项任务,为另一个任务腾出空间吗?
您需要调用回调函数()
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 callback();
},20);