gpt4 book ai didi

ruby - 如何判断方法或循环是否已完成?

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:46 25 4
gpt4 key购买 nike

我在编写一个 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 方法在完成之前被调用两次?

最佳答案

我不认为你有你认为的问题。您描述代码的方式仍然是单线程的。您没有启动新线程来执行 history.run,这意味着在您的 history.run 方法返回之前不会执行 sleep 30。

是否需要创建此线程取决于您要查找的行为。如果您想在 history.run 完成后 30 秒触发对 history.run 的另一次调用,您的代码现在将执行此操作。如果您想每 30 秒运行一次,与 history.run 的执行时间无关(例如,history.run 需要 7.5 秒,所以您希望在 22.5 秒后再次运行查询),那么线程解决方案可能是最合适的优雅。

关于ruby - 如何判断方法或循环是否已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com