是否可以使用async.parallelLimit设置并行运行进程的限制?我使用了以下非常简单的代码来测试它是如何工作的。
var async = require("async");
var i = 0;
function write() {
i++;
console.log("Done", i);
}
async.parallelLimit([
function(callback) {
write();
callback();
}
], 10, function() {
console.log("finish");
});
当然我得到的是:
Done 1
finish
在我的例子中,函数wich经常被调用,但我只希望它同时运行5次。其他电话应该排队。(是的,我知道async.queue,但这不是我在这个问题上想要的)。
所以现在的问题是,async.parallelLimit是否可以做到这一点?
//编辑:
我有类似的东西:
for(var i = 0; i < somthing.length; i++) { //i > 100 for example
write();
}
由于node.js的不同步性,它可以同时运行100次。但是在这种情况下,我如何限制并行运行的进程呢?
最佳答案
很简短的回答;是的。这正是AsyncParallelLimit所做的。
在您的例子中,您只向parallelLimit传递一个函数。这就是为什么只叫一次。如果要多次传递具有相同函数的数组,则执行次数与放入数组的次数相同。
请注意,示例函数实际上并不异步地执行任何工作。因此,这个示例函数将始终以串行方式执行。如果您有一个执行异步工作的函数,例如网络请求或文件I/O,它将并行执行。
异步工作负载的一个更好的示例函数是:
function(callback) {
setTimeout(function(){
callback();
}, 200);
}