更新:现在意识到这是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
“等待”其他作业完成的唯一方法是定义在该批次中的所有作业完成时执行的回调。由于您尚未定义任何内容,因此您将无法获得该行为。查看批量维基页面。
batch.on(:success, ...)