Async: mapLimit مع حد n / sec

تم إنشاؤها على ٢٧ أكتوبر ٢٠١٦  ·  8تعليقات  ·  مصدر: caolan/async

هل من الممكن قصر التنفيذ المتوازي على عدد / ثانية؟
يعد هذا ضروريًا لتلك الخدمات ، مثل حدود وحصص Google Sheet API (راجع https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas) ، والتي تحد من عدد الاستعلامات في الثانية ( QPS) لكل IP.
شكرا!

docs feature wont fix

التعليق الأكثر فائدة

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
 });

ال 8 كومينتر

تم طرح ميزات مماثلة من قبل. (# 1113 # 1082 # 1020 # 942 # 37) هناك طلب على نوع من وظائف "قائمة الانتظار المخنقة" ، لكن إدارة هذا النوع من البناء بشكل صحيح يمثل مشكلة صعبة.

هذا هو نوع الأشياء التي يستخدمها الأشخاص مكتبات وأنظمة قائمة انتظار الرسائل المخصصة من أجلها.

tl ؛ ستحتاج dr you / async إلى نوع من وظيفة التنعيم للقيام بذلك. إذا أردنا القيام بذلك ، فسنقوم على الأرجح بتنفيذ وظيفة تجانس أسية دلو رمزي .

إذا كان أي شخص مهتمًا بالعمل على هذا ، فأخبرنا بذلك :)

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
 });

هذا يبدو وكأنه lib يجب أن نذكره في ملفنا التمهيدي. يبدو أنه نفعل ما أردنا بناءه.

نعم ، إنها تستخدم دلوًا رمزيًا تحت الغطاء وهو نفس النهج الذي كنت أتبعه. سأكون على ما يرام تمامًا بتأجيل معدل تقييد المكتبات الخارجية :)

نعم ، بصراحة لن أكون سعيدًا بالحاجة إلى دعم شيء كهذا داخل Async. هناك الكثير من المشاكل عند القيام بتحديد المعدل.

تغيير العلامات على هذا للإشارة إلى أننا بحاجة إلى مكان في المستندات للمكتبات الأخرى التي تعمل على توسيع Async.

طريقة أخرى للقيام بذلك باستخدام Promise.all و Promise-throttle:

https://stackoverflow.com/questions/20253425/throttle-and-queue-up-api-requests-due-to-per-second-cap/47627820#47627820

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات