很多时候我会有像这样的后台工作者代码。
class MyJob < ActiveJob::Base
def perform
User.find_in_batches.each do |batch|
MyOtherJobToProcessBatchOfUsers.perform_later(batch)
end
end
end
基本上,一项工作会产生许多儿童工作。是否有一种简单的方法可以知道所有工作何时完成?我知道我可以在父工作中增加一个计数器,让每个子工作减少那个计数器。但是,任何试图这样做的人都会告诉你,你可能会遇到一些并发症。
任何帮助将不胜感激。
答案 0 :(得分:2)
这是Sidekiq Pro的Batch功能。你是对的:正确构建非常困难。我不知道任何实现它的开源库。
https://github.com/mperham/sidekiq/wiki/Batches http://sidekiq.org/pro/