並列実行を数/秒に制限することは可能ですか?
これは、Google Sheet APIの制限や割り当て(https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotasを参照)など、1秒あたりのクエリ数を制限するサービスに必要です( QPS)IPごと。
ありがとう!
同様の機能については以前に質問されています。 (#1113#1082#1020#942#37)ある種の「スロットルキュー」機能が求められていますが、そのような構成を適切に管理することは難しい問題です。
これは、人々が専用のメッセージキューライブラリとシステムを使用するようなものです。
OP:おそらくあなたはすでにこれを解決しています.....私は別のNPMパッケージを使用して、リーキーバケットまたはトークンバケットモデルを使用してレート制限を実装しました。 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
});
これは、Readmeで言及する必要のあるlibのようです。 私たちが作りたかったことをしているようです。
うん、それは私が取っていたのと同じアプローチであるボンネットの下でトークンバケットを使用しています。 外部ライブラリに制限するレートを延期するのは非常にうまくいくでしょう:)
ええ、正直なところ、Async内でそのようなものをサポートしなければならないことにわくわくすることはありません。 レート制限を行う場合、非常に多くの落とし穴があります。
これのタグを変更して、非同期を拡張する他のライブラリのドキュメントに場所が必要であることを示します。
Promise.allとpromise-throttleを使用してこれを行う別の方法:
最も参考になるコメント
OP:おそらくあなたはすでにこれを解決しています.....私は別のNPMパッケージを使用して、リーキーバケットまたはトークンバケットモデルを使用してレート制限を実装しました。 https://www.npmjs.com/package/limiterこれは過去に私にとってうまく機能しました。 レート制限マッパー関数を作成するには、次のようにします。 マッパー関数は非同期で直接使用されます。