Async: mapLimit con límite de n/s

Creado en 27 oct. 2016  ·  8Comentarios  ·  Fuente: caolan/async

¿Es posible limitar la ejecución paralela a un número/seg?
Esto es necesario para aquellos servicios, como Límites y Cuotas de API de hoja de Google (consulte https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas), que limitan la cantidad de consultas por segundo ( QPS) por IP.
¡Gracias!

docs feature wont fix

Comentario más útil

OP: tal vez ya haya resuelto esto... He usado otro paquete de NPM para implementar la limitación de velocidad usando modelos de balde con fugas o balde de fichas. https://www.npmjs.com/package/limiter Esto me ha funcionado bien en el pasado. Para crear una función de mapeador de velocidad limitada, simplemente haga algo como esto. Su función de mapeador se usa directamente con async.

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

Todos 8 comentarios

Se han preguntado sobre características similares anteriormente. (#1113 #1082 #1020 #942 #37) Hay demanda de algún tipo de funcionalidad de "cola acelerada", pero administrar ese tipo de construcción correctamente es un problema difícil.

Este es el tipo de cosas para las que la gente usa bibliotecas y sistemas de cola de mensajes dedicados.

tl; dr you/async necesitaría algún tipo de función de suavizado para hacer esto. Si tuviéramos que hacer esto, probablemente implementaríamos una función de suavizado exponencial en un cubo de fichas .

Si alguien está interesado en trabajar en esto, háganoslo saber :)

OP: tal vez ya haya resuelto esto... He usado otro paquete de NPM para implementar la limitación de velocidad usando modelos de balde con fugas o balde de fichas. https://www.npmjs.com/package/limiter Esto me ha funcionado bien en el pasado. Para crear una función de mapeador de velocidad limitada, simplemente haga algo como esto. Su función de mapeador se usa directamente con async.

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

Eso parece una biblioteca que deberíamos mencionar en nuestro archivo Léame. Parece hacer lo que queríamos construir.

Sí, está usando un cubo de fichas debajo del capó, que es el mismo enfoque que estaba tomando. Estaría bastante bien aplazando la limitación de velocidad a bibliotecas externas :)

Sí, sinceramente, no me encantaría tener que apoyar algo así dentro de Async. Hay tantas trampas cuando se limita la velocidad.

Cambiar las etiquetas en esto para indicar que necesitamos un lugar en los documentos para otras bibliotecas que extiendan Async.

¿Fue útil esta página
0 / 5 - 0 calificaciones