更新:现在意识到这是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
答案 0 :(得分:0)
“等待”其他作业完成的唯一方法是定义一个在该批处理中的所有作业完成时执行的回调。由于您尚未定义任何行为,因此不会得到该行为。查看Batchs Wiki页面。
batch.on(:success, ...)