异步以不可预测的块大小获取最少数量的行

手指

我想从不断填充的队列中检索所有当前可用的文档。我从 Amazon 的 SQS(简单队列服务)中提取,每个请求异步返回 0 到 10 行,其中可能包括先前提取的重复项。

每个唯一的文档都可以并行异步处理,独立于任何其他文档,因此即使有额外的异步查找,这部分对我来说在概念上也很简单。我遇到麻烦的地方是提取正确数量的记录以处理整个批次。

假设我查看并看到队列中有 100 个文档。如果我只执行 10 次提取,我可能最终会得到 100 个文档中的 50 个……或者如果我非常幸运的话,可能会得到全部 100 个。如果我一次获取 1,我会遇到基本相同的问题——我可能会得到 0 或 1 或一个欺骗(它请求循环到服务器集群)。如果让每个 async fetcher 更新一个公共计数器,它可能会在第一个请求甚至知道要计算多少个唯一文档之前产生数百个请求。如何确定何时停止从队列中获取额外的记录组?

这是失败代码的提炼版本:

libutil.countOffers(function(err, data) {
  processEvents(~~data.Attributes.ApproximateNumberOfMessages);
});

function processEvents(count) {
  while (count > 0) {
    libutil.receiveOffers(10, function(err, offers) {
      if (offers && offers.Messages) {
        count-=offers.Messages.length;
        // ^ Broken because async receiveOffers runs hundreds of
        //   times before count is incremented the first time. 
      }
    });
  }      
}
什里哈里·巴拉苏布拉马尼
libutil.countOffers(function(err, data) {
  processEvents(~~data.Attributes.ApproximateNumberOfMessages);
});

function processEvents(count) {
    libutil.receiveOffers(10, function(err, offers) {
      if (offers && offers.Messages) {
        count-=offers.Messages.length;
        if(count > 0){
          processEvents(count)
        }
      }
    });      
}

您的 while 循环不会等待异步回调中的计数增加。所以使用递归函数或承诺。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获得最少数量的子词

来自分类Dev

添加最少数量的字符以形成回文

来自分类Dev

c# - 如何重构此 switch 语句以使用最少数量的代码行?

来自分类Dev

如何忽略3行的每个块在一起而忽略连续行的较少数量?

来自分类Dev

如何获得具有最少数量的硬链接的文件?

来自分类Dev

如何发出请求以从服务器获取最少数据?

来自分类Dev

预测C中的malloc块大小网格

来自分类Dev

在Tableau中绘制点之前需要最少数量的数据点

来自分类Dev

用最少数量的交换对序列进行重新排序,以满足部分订单约束

来自分类Dev

包含列表中所有元素的递增序列的最少数量

来自分类Dev

当满足最少数量的条件时,如何用yup验证密码

来自分类Dev

RAID 10需要最少数量的硬盘驱动器?

来自分类Dev

将一系列元素分解为最少数量的回文

来自分类Dev

如何使用 Laravel Eloquent 使用 groupBy 和 havingRaw 查询最少数量的相关模型

来自分类Dev

在给定的时间段内,线程执行的指令数是否有最少数量?

来自分类Dev

如何匹配最少数量的正则表达式组或断言?

来自分类Dev

根据ID和日期获取种子数量最少的种子

来自分类Dev

如何从Oracle中的列中获取最少的未使用数量?

来自分类Dev

合并不可预测数量的相似 JSON 的最佳方法

来自分类Dev

获取RSA密码的块大小

来自分类Dev

尝试创建一种算法来创建生成树,并从未加权的图中删除最少数量的边

来自分类Dev

尝试创建一个算法来创建生成树,并从未加权的图中删除最少数量的边

来自分类Dev

C中动态的,不可预测的大小数组

来自分类Dev

慢慢减少数量

来自分类Dev

最少数字位数,无重复

来自分类Dev

获取任意数量的行之间重复的数量

来自分类Dev

获取大小大致相等的块的索引

来自分类Dev

在给定预定键集的情况下,如何对键进行重新排序,以便在插入B树时使用最少数量的节点?

来自分类Dev

如何使用最少数量的命令将所有 .txt 文件从所有子目录复制到一个目录?

Related 相关文章

  1. 1

    获得最少数量的子词

  2. 2

    添加最少数量的字符以形成回文

  3. 3

    c# - 如何重构此 switch 语句以使用最少数量的代码行?

  4. 4

    如何忽略3行的每个块在一起而忽略连续行的较少数量?

  5. 5

    如何获得具有最少数量的硬链接的文件?

  6. 6

    如何发出请求以从服务器获取最少数据?

  7. 7

    预测C中的malloc块大小网格

  8. 8

    在Tableau中绘制点之前需要最少数量的数据点

  9. 9

    用最少数量的交换对序列进行重新排序,以满足部分订单约束

  10. 10

    包含列表中所有元素的递增序列的最少数量

  11. 11

    当满足最少数量的条件时,如何用yup验证密码

  12. 12

    RAID 10需要最少数量的硬盘驱动器?

  13. 13

    将一系列元素分解为最少数量的回文

  14. 14

    如何使用 Laravel Eloquent 使用 groupBy 和 havingRaw 查询最少数量的相关模型

  15. 15

    在给定的时间段内,线程执行的指令数是否有最少数量?

  16. 16

    如何匹配最少数量的正则表达式组或断言?

  17. 17

    根据ID和日期获取种子数量最少的种子

  18. 18

    如何从Oracle中的列中获取最少的未使用数量?

  19. 19

    合并不可预测数量的相似 JSON 的最佳方法

  20. 20

    获取RSA密码的块大小

  21. 21

    尝试创建一种算法来创建生成树,并从未加权的图中删除最少数量的边

  22. 22

    尝试创建一个算法来创建生成树,并从未加权的图中删除最少数量的边

  23. 23

    C中动态的,不可预测的大小数组

  24. 24

    慢慢减少数量

  25. 25

    最少数字位数,无重复

  26. 26

    获取任意数量的行之间重复的数量

  27. 27

    获取大小大致相等的块的索引

  28. 28

    在给定预定键集的情况下,如何对键进行重新排序,以便在插入B树时使用最少数量的节点?

  29. 29

    如何使用最少数量的命令将所有 .txt 文件从所有子目录复制到一个目录?

热门标签

归档