【发布时间】:2022-01-27 01:06:27
【问题描述】:
我正在尝试“并行”执行一些(数千个)作业。 问题是每个作业都可能包含对外部服务器的请求,需要几 MB 内存。因此,仅异步执行它们是一个坏主意,因为这会导致外部服务器过载并且 RAM 使用量会爆炸。
所以我试图以有限的并发性执行这些作业。基于我的研究和我对找到的其他解决方案的理解能力,我决定使用async.parallelLimit() 并尝试以这种方式使用它:
async function doSomething(jobDataList) {
let tasks = jobDataList.map(function(jobInfo) {
return async function() {
await processJob(jobInfo);
}
});
await async.parallelLimit(tasks, 4);
// all jobs have to be finished here.
}
上述代码无法正常运行,尤其是在doSomething 函数结束时仍有作业在运行。
那么我如何正确地执行我的 async processJob 函数,使其以有限的并发执行,并且当 doSomething 结束时所有作业都已处理(这样我就可以继续处理下一批作业)。
【问题讨论】:
标签: node.js asynchronous async.js