【问题标题】:How to create method that hits an API based on a one sec interval?如何创建基于一秒间隔命中 API 的方法?
【发布时间】:2011-05-07 12:04:16
【问题描述】:

我正在创建一个库,我将在 heroku 上将 delay_job 作为后台服务运行。

lib 方法的重点是使用 API 来处理大量数据。我使用的 API 限制为每 600 秒 600 个 Graph API 请求。

话虽如此,我想知道是否有可能确保我的延迟工作不会超过这个问题。

类似:

requests_made = 0
@items.each do |x|

    if request_made >= 600
        pause for 1 second??????? Is this possible?
    end

    ### HIT THE API
    requests_made = requests_made + 1
end

这样的事情可能吗?可以暂停吗? Heroku 的延迟作业将运行长达 4 小时的作业,因此我认为超时不是问题。想法?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 heroku


    【解决方案1】:

    sleep(1) 可能是最明确和最简单的方法。使用它会有问题吗?

    作为对评论的回复添加

    要衡量调用 API 所花费的时间,请执行以下操作

    start_time = Time.now
    call_the_API
    spent_time = Time.now - start_time
    

    然后你可以对spent_time做一些条件。

    【讨论】:

    • 我不这么认为?我以前从未使用过 sleep
    • 任何计时方法,因此确定运行 API 调用所需的时间,然后从 1 中减去...如果值为 + ,则睡眠?
    • @AnApprentice 我添加了如何衡量花费在 API 上的时间。
    • @AnApprentice,一旦你有了spent_time,看看是不是> 1。如果是则立即继续而不是休眠。此外,sleep() 采用小数值,所以如果spent_time < 1 你可以sleep(1.0 - spent_time) 让代码暂停不到一秒,帮助你保持正轨。如果它不是那么重要,你可以简单地 sleep(1) 总是这样,你会做不到 600 次。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2022-12-03
    • 2020-03-12
    • 2012-09-25
    • 2016-10-11
    相关资源
    最近更新 更多