我有一個方法'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
而不是寫'15 * 60'和註釋。你可以寫'15.分鐘' – oldergod