Sidekiq父批次不等待子批次

时间:2019-03-14 18:30:16

标签: sidekiq

更新:现在意识到这是Sidekiq Pro的唯一功能。难怪它没有用。

我先创建一个父批处理,然后在其中创建子批处理,但是父级工作是在子项完成之前“完成”。

我正在按照文档说的做,我唯一可以说的区别是我不是直接在Sidekiq工作者中而是在该工作者所调用的类中创建子批。

但是我通过了该批次,并确认子批次具有与初始整体批次匹配的batch.parent_bid。

当我观看Sidekiq网站时,我看到父母工人在所有孩子面前都走完了路,但我需要等待它。想法?

代码看起来像这样:

overall = Sidekiq::Batch.new
overall.jobs do
    ParentWorker.perform_async current_user.id
end


class ParentWorker
  include Sidekiq::Worker
  include Sidekiq::Status::Worker

  def perform user_id
    user = User.find(user_id)
    UserPopulator.new.import_all user, batch
  end

end

class UserPopulator

  def initialize user, batch
    @user = user
    @batch = batch
  end

  def import_all
    overall = Sidekiq::Batch.new(@batch.bid)
    overall.jobs do
      child_batch = Sidekiq::Batch.new
      user.friends.each do |friend|
        child_batch.jobs do
          GetFriends.perform_async @user_id, friend
        end
      end
    end
  end

end

1 个答案:

答案 0 :(得分:0)

“等待”其他作业完成的唯一方法是定义一个在该批处理中的所有作业完成时执行的回调。由于您尚未定义任何行为,因此不会得到该行为。查看Batchs Wiki页面。

batch.on(:success, ...)