ruby - 延迟编写 Ruby 中每个 X 数组项的脚本

标签 ruby api csv throttling

我需要限制我的 API 请求。我的脚本中有一个循环,它从一个 csv 文件中提取 1000 个值并循环遍历每个值,每个值都是一个单独的 API 调用。例如,如果我想每分钟只进行 10 次 API 调用……我该怎么做?我在想这样的事情:

  csv_array.each_slice(10) do |chunk|
        chunk.each do |x|
          make_api_call(x)
          Delay.one_minute
        end
  end

是否有更好的选择来限制我的 API 请求,或者我是否正在按照上述想法行事?我正在使用 ruby 1.9.3。

最佳答案

我过去用过这样的东西:

SLEEP_WINDOW = 60 * 1 # minutes
csv_array.each_slice(10) do |chunk|
  start_time = Time.now
  chunk.each do |x|
    make_api_call(x)
  end
  sleep_time = SLEEP_WINDOW - (Time.now - start_time)
  sleep sleep_time if (sleep_time > 0)
end

假设可以快速通过 block ,然后任何剩余的延迟时间都会使代码进入休眠状态。如果 API 调用超过一分钟,代码将立即循环。

关于ruby - 延迟编写 Ruby 中每个 X 数组项的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698975/

相关文章:

ruby - class_eval、class_exec、module_eval 和 module_exec 之间有什么区别?

ruby-on-rails - 如何使用 Rails 和 Heroku 在 RVM 中设置默认 gemset

java - 如何在 telegram bot 中看到来自 java web 应用程序的传入 POST 请求

java - Dictionary Api For Java(用于查找单词的含义)

scala - 无法覆盖 Spark 2.x 中 CSV 文件的架构

python 创建一个新的 csv 并从列表中填充标题行

python - 获取 python3 中特定字符串部分的数据类型

Ruby 相当于 Groovy 的 Elvis (? :) operator?

api - 是否应在API中对分页进行零索引?

ruby-on-rails - 如何验证非模型(甚至非对象)字段