我有一个方法“rate_limited_follow”,它使用我的 Twitter 用户帐户并关注数组“用户”中的所有用户。Twitter 有严格的速率限制,因此该方法通过休眠 15 分钟然后重试来处理这种意外情况。(我没有写这个方法,而是从 Twitter ruby gem api 得到的)。您会注意到它会检查尝试次数是否小于 MAX_ATTEMPTS。
我的用户数组有大约 400 个我正在尝试关注的用户。它一次添加 15 个用户(当速率限制似乎开始时),然后休眠 15 分钟。由于我将 MAX_ATTEMPTS 常量设置为 3(只是为了测试它),我希望它在添加 45 个用户(3 乘以 15)后停止尝试,但它已经过去了,大约每 15 分钟添加 15 个用户,所以它似乎 num_attempts 以某种方式保持在 3 以下,即使它经历了这个周期超过 3 次。我对代码有什么不明白的地方吗?一旦“睡眠”完成并点击“重试”,它从哪里重新开始?num_attempts 没有增加有什么原因吗?
在循环中调用方法
>> users.each do |i|
?> rate_limited_follow(myuseraccount, i)
>> end
带常量的方法定义
MAX_ATTEMPTS = 3
def rate_limited_follow (account, user)
num_attempts = 0
begin
num_attempts += 1
account.twitter.follow(user)
rescue Twitter::Error::TooManyRequests => error
if num_attempts <= MAX_ATTEMPTS
sleep(15*60) # minutes * 60 seconds
retry
else
raise
end
end
end