Async: n/sec μ œν•œμ΄ μžˆλŠ” mapLimit

에 λ§Œλ“  2016λ…„ 10μ›” 27일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: caolan/async

병렬 싀행을 수/초둜 μ œν•œν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
μ΄λŠ” Google Sheet API Limits 및 Quotas(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 ) μΌμ’…μ˜ "throttled queue" κΈ°λŠ₯에 λŒ€ν•œ μˆ˜μš”κ°€ μžˆμ§€λ§Œ κ·ΈλŸ¬ν•œ ꡬ성을 μ μ ˆν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 것은 μ–΄λ €μš΄ λ¬Έμ œμž…λ‹ˆλ‹€.

이것은 μ‚¬λžŒλ“€μ΄ μ „μš© λ©”μ‹œμ§€ λŒ€κΈ°μ—΄ 라이브러리 및 μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜λŠ” μ’…λ₯˜μž…λ‹ˆλ‹€.

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

그것은 μš°λ¦¬κ°€ μ½μ–΄λ³΄κΈ°μ—μ„œ μ–ΈκΈ‰ν•΄μ•Ό ν•˜λŠ” 라이브러리처럼 λ³΄μž…λ‹ˆλ‹€. μš°λ¦¬κ°€ λ§Œλ“€κ³  μ‹Άμ—ˆλ˜ 것을 ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€.

예, λ‚΄κ°€ μ·¨ν•œ 것과 λ™μΌν•œ μ ‘κ·Ό 방식인 ν›„λ“œ μ•„λž˜μ— 토큰 버킷을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ™ΈλΆ€ 라이브러리둜 속도 μ œν•œμ„ μ—°κΈ°ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. :)

예, μ†”μ§νžˆ 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 λ“±κΈ‰