Sidekiqで指定時間待ってから実行する
sidekiqで非同期処理を実行する際にperform_asyncだとキューに入ってからすぐに実行されるが、指定時間待ってから実行するようにしたかったので対応方法を調査。
wikiに載っていた。
perform_inを使って第一引数に秒数を指定すれば、指定時間待ってから実行されるようになる。
SomeWorker.perform_in(1, 'bob', 5)
perform_atを使って第一引数にtimestampを指定すれば、その時間に実行されるようになるとのこと。
SomeWorker.perform_at(1.second.from_now, 'bob', 5)
今回試した用途ではperform_inが適していたのでperform_inで対応した。
ただ、Scheduled Jobsは正確な秒数を待ってくれるわけではなく、デフォルトだと5秒おき(5.1以前は15秒おき)にジョブのチェックをして指定時間を越えていたら実行するようになっているとのこと。
今回は1秒間隔でチェックしてほしかったので↓も合わせて設定した。
Sidekiq.configure_server do |config|
config.average_scheduled_poll_interval = 1
end