Ruby/Railsで非同期的に長時間実行する操作を実行する必要があります。私が見つけたオプションの1つをグーグルで検索すると、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')
すべてがうまくいきます!しかし問題がある。
この非同期メソッドを数秒ごとに呼び出し続けても、重い操作が実際に実行される時間は1分であり、機能しません。
例を挙げましょう。
5.times { WeeklyReportWorker.perform_async('user', 'product') }
これで、私の重い操作が5回実行されます。最適には、5番目の非同期呼び出しが行われる前に最初の操作の実行が開始されたかどうかに応じて、1回または2回だけ実行する必要があります。
それを解決するためのヒントはありますか?