我正在考虑使用Sidekiq::Batch
,并从以下参考中学习:https://github.com/sidekiq/sidekiq/wiki/Batches
我想知道以下情况是否可能,以及在这种情况下会发生什么:
在下面的示例中,我在批处理中使用perform_in
调度一个作业。
MyJob的最后一个应在5小时后执行。
batch = Sidekiq::Batch.new
batch.on(:success, MyCallback)
batch.jobs do
5.times do |index|
MyJob.perform_in((1 * index).hour, args)
end
end
通过设置batch.on(:success, MyCallback)
,我可以在所有作业完成后执行一些操作。在这里,所有的工作都应该在5小时和几分钟内完成。
我的问题是:
- 在这种情况下,在所有作业在5小时零几分钟内完成(所有作业完成)后,回调是否会正确触发?
- 在这种情况下,批处理在哪里等待,批处理如何知道所有作业已经完成?
- 如果有很多批次像这样等待很长时间,会有什么负面影响吗?
我很感激任何帮助,因为我不熟悉Sidekiq,提前谢谢你。
1条答案
按热度按时间t98cgbkg1#
1.在这种情况下,在所有作业在5小时零几分钟内完成(所有作业完成)后,回调是否会正确触发?
是的
1.在这种情况下,批处理在哪里等待,批处理如何知道所有作业已经完成?
Redis中有一个批处理计数器,上面写着5个作业。当每个作业完成时,该计数器递减。为0时,将触发回调。
1.如果有很多批次像这样等待很长时间,会有什么负面影响吗?
一点也不。批处理只是数据,它不执行,也不消耗任何资源,只有作业和回调实际执行。