簡體   English   中英

Node.js-async.queue()-如何結束任務以允許更多任務運行?

[英]Node.js - async.queue() - How to end a task to allow more to run?

我正在使用異步的隊列方法來排隊任務。 我將並發設置為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
...

我應該做些什么來正式完成一項任務,以便為另一個人騰出空間嗎?

您需要調用您的callback()

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM