我正在寫一個Ruby程序,我有一個奇怪的問題。如何判斷方法或循環是否完成?
基本上這個想法是讓程序在後臺不斷運行。該程序每30秒檢查一次我的瀏覽器歷史記錄,並將任何新的歷史記錄項目上載到服務器。
# client.rb
history = HistoryUploader.new(Chrome)
# Run everything
loop do
history.run
sleep 30
end
的HistoryUploader
類的重要組成部分,看起來像這樣
class HistoryUploader
def run
upload_history until local.last_seen_history_item == server.last_seen_history_item
end
def upload_history
# POST batches of history items to the server
end
end
我用這個代碼中看到的主要問題是,如果HistoryUploader.run
時間超過30秒才能完成(這很可能也是因爲它發送多個http請求),client.rb
的外部循環將嘗試再次調用run
,並且我可能會收到併發請求到服務器,這真的會讓事情混淆。
有沒有辦法阻止run
方法被調用兩次,直到它完成?