是否可以将并行执行限制为数/秒?
这对于那些限制每秒查询数的服务来说是必要的,例如 Google Sheet API 限制和配额(请参阅 https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas)( QPS)每个 IP。
谢谢!
之前已经询问过类似的功能。 ( #1113 #1082 #1020 #942 #37 ) 需要某种“节流队列”功能,但正确管理这种结构是一个难题。
这就是人们使用专用消息队列库和系统的目的。
OP:也许你已经解决了这个问题.....我使用了另一个 NPM 包来实现使用leakybucket 或令牌桶模型的速率限制。 https://www.npmjs.com/package/limiter这在过去对我来说效果很好。 要创建速率限制映射器功能,只需执行以下操作。 您的映射器函数直接与异步一起使用。
var RateLimiter = require("limiter").RateLimiter;
var limiter = new RateLimiter(2, "second");
var async = require('async');
function rateLimitedMapper(item, callback)
{
limiter.removeTokens(1, function(err, remainingRequests) {
console.log("working on item: " + item);
callback(null, item.length);
});
}
async.map(input, rateLimitedMapper, function(err, results) {
// do something with results
});
这似乎是我们应该在自述文件中提到的一个库。 似乎在做我们想做的事。
是的,它在引擎盖下使用了一个令牌桶,这与我采用的方法相同。 我会很好地将速率限制推迟到外部库:)
是的,老实说,我不会对在 Async 中支持类似的东西感到兴奋。 进行速率限制时有很多陷阱。
更改此标签以表示我们需要在文档中为扩展 Async 的其他库提供一个位置。
另一种使用 Promise.all 和 promise-throttle 的方法:
最有用的评论
OP:也许你已经解决了这个问题.....我使用了另一个 NPM 包来实现使用leakybucket 或令牌桶模型的速率限制。 https://www.npmjs.com/package/limiter这在过去对我来说效果很好。 要创建速率限制映射器功能,只需执行以下操作。 您的映射器函数直接与异步一起使用。