Sidekiq でジョブの並列実行数を制限する

結論

sidekiq-limit_fetch を使う。

背景

実行に結構な時間がかかるジョブがあって、ただ、それは同時実行されては困るジョブだったので、並列実行数を制限したかった(並列実行数を 1 にしたかった)ところ、デフォルトでは指定できないとのことなので gem 探しをしました。

具体例

公式ドキュメントのとおりです。並列実行数を制限したいキューの名前を指定して Sidekiq::Queue['my_queue'].limit というメソッドで実行数を設定すればよいだけです*1

class MyHardWorker
  include Sidekiq::Worker
  sidekiq_options queue: :my_queue
  Sidekiq::Queue['my_queue'].limit = 1

  def perform
    # 実行する内容
  end
end

*1:sidekiq.yml に書く方法もあります

Powered by はてなブログ