我需要在 ruby/rails 中异步执行长时间运行的操作。谷歌搜索我发现的一个选项是 Sidekiq。
class WeeklyReportWorker
include Sidekiq::Worker
def perform(user, product, year = Time.now.year, week = Date.today.cweek)
report = WeeklyReport.build(user, product, year, week)
report.save
end
end
# call WeeklyReportWorker.perform_async('user', 'product')
一切都很好!但有一个问题。
如果我每隔几秒就一直调用这个异步方法,但是执行繁重操作的实际时间是一分钟,那么事情就不起作用了。
让我举个例子。
5.times { WeeklyReportWorker.perform_async('user', 'product') }
现在我的繁重手术将进行5次。最佳情况下,它应该只执行一次或两次,具体取决于第一个操作的执行是否在第 5 次异步调用之前开始。
你有提示如何解决它?