gpt4 book ai didi

node.js - async.parallel 用于大量函数

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:21 26 4
gpt4 key购买 nike

我有一个函数,我想调用 100 万次。该函数对数据库进行两次调用(首先是 SELECT,然后是 UPDATE)。我目前的做法是将这些函数存储在一个数组中,然后对该数组调用 async.parallel。

我担心它会导致 ENOMEM 或其他东西。

这里有更好的方法吗?

最佳答案

你可以用生成器做一个队列:

var totalTasks = 1000000;
var nTasks = 0;

// Generate data to send to query
var getData = (function() {
var i = 0;

return function() {
i++;
return {
number: i
};
};

})();

// Create the task running each time
var task = function(data, done) {
nTasks++;
console.log("Make task", nTasks);
doQuery(data, done);
};

// Create queue with a limit concurrency
var queue = async.queue(task, 10); // <- parallels queries*

// The callback execute each task was execute
var cb = function(err) {
if (err) throw err;

// Add new tasks to queue if is neccesary
if (nTasks < totalTasks && queue.length() < queue.concurrency) {
queue.push(getData(), cb);
}

};

var i;

// Add the first x tasks to queue
for (i = 0; i < queue.concurrency; i++) {
queue.push(getData(), cb);
}
  • 需要考虑连接池的大小,或者MySQL的最大当前进程数。

关于node.js - async.parallel 用于大量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com