Ruby 批量处理用于对讲的数组

问题描述 投票:0回答:2

我有一组需要处理的对象。我需要通过他们的 API 将它们发送到第三方系统,该系统只允许我一次提交 100 个对象。

假设我有一个像这样的对象数组

myUserArray = [{first_name: 'Jon', last_name: 'Snow'}, {first_name: 'Sansa', last_name: 'Stark'}...]

我最终像这样将其发送到他们的 API

intercom.users.submit_bulk_job(create_items: myUserArray)

当对象数量小于 100 时,这可以正常工作,但当对象数量大于 100 时,由于它们的速率限制,这会抛出错误,这很公平。我有 5000 个对象要处理,因此我需要一种将 myUserArray 批处理成 100 个块的方法,直到它们全部完成。如有任何建议,将不胜感激!

ruby ruby-on-rails-3 intercom
2个回答
7
投票

Enumerable#each_slice
来救援:

myUserArray.each_slice(100) do |slice|
  intercom.users.submit_bulk_job(create_items: slice)
end

0
投票

如果动态连续生成对象数组,请考虑 msg-batcher gem。

以下代码将使用最多 100 个用户对象调用

intercom.users.submit_bulk_job

require 'msg-batcher'

batcher = MsgBatcher.new 100, 1000 do |batch|
  intercom.users.submit_bulk_job(create_items: batch)
end

myUserArray.each do |user|
  batcher.push user
end
© www.soinside.com 2019 - 2024. All rights reserved.