Async: mapLimit dengan batas n/dtk

Dibuat pada 27 Okt 2016  ·  8Komentar  ·  Sumber: caolan/async

Apakah mungkin untuk membatasi eksekusi paralel ke angka/detik?
Ini diperlukan untuk layanan tersebut, seperti Batas dan Kuota Google Sheet API (lihat https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas) , yang membatasi jumlah kueri per detik ( QPS) per IP.
Terima kasih!

docs feature wont fix

Komentar yang paling membantu

OP: mungkin Anda sudah menyelesaikan ini ..... Saya telah menggunakan paket NPM lain untuk menerapkan pembatasan kecepatan menggunakan model leakybucket atau token bucket. https://www.npmjs.com/package/limiter Ini telah bekerja dengan baik untuk saya di masa lalu. Untuk membuat fungsi mapper tingkat terbatas, lakukan saja sesuatu seperti ini. Fungsi mapper Anda langsung digunakan dengan 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
 });

Semua 8 komentar

Fitur serupa telah ditanyakan sebelumnya. ( #1113 #182 #1020 #942 #37 ) Ada permintaan untuk semacam fungsionalitas "antrian yang dibatasi", tetapi mengelola konstruksi semacam itu dengan benar adalah masalah yang sulit.

Ini adalah jenis hal yang digunakan orang untuk perpustakaan dan sistem antrian pesan khusus.

tl; dr you/async akan membutuhkan semacam fungsi perataan untuk melakukan ini. Jika kita melakukan ini, kita mungkin akan menerapkan fungsi pemulusan eksponensial sebagai token bucket .

Jika ada yang tertarik untuk mengerjakan ini, beri tahu kami :)

OP: mungkin Anda sudah menyelesaikan ini ..... Saya telah menggunakan paket NPM lain untuk menerapkan pembatasan kecepatan menggunakan model leakybucket atau token bucket. https://www.npmjs.com/package/limiter Ini telah bekerja dengan baik untuk saya di masa lalu. Untuk membuat fungsi mapper tingkat terbatas, lakukan saja sesuatu seperti ini. Fungsi mapper Anda langsung digunakan dengan 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
 });

Itu sepertinya lib yang harus kita sebutkan di readme. Tampaknya melakukan apa yang ingin kita bangun.

Ya, itu menggunakan ember token di bawah kap yang merupakan pendekatan yang sama yang saya ambil. Saya akan cukup baik menunda pembatasan kecepatan ke perpustakaan eksternal :)

Ya, sejujurnya saya tidak akan senang harus mendukung sesuatu seperti itu di dalam Async. Ada begitu banyak gotcha saat melakukan pembatasan kecepatan.

Mengubah tag ini untuk menandakan bahwa kita memerlukan tempat di dokumen untuk perpustakaan lain yang memperluas Async.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat