我有几个工作进程正在使用Sidekiq运行,并使用Sidetiq进行调度。我正在寻找关于在执行回调之前等待所有工作人员完成的最佳方式的建议,类似于Sidekiq-Pro的批处理功能。任何关于可能的选择的建议都将不胜感激!
发布于 2016-03-02 21:12:17
你可以写一个方法:
def wait_for_sidekiq
sleep(1) until Sidekiq::Workers.new.size == 0 && Sidekiq::Queue.new.size == 0
end我还建议您首先确保作业已排队:
def wait_for_queuing
sleep(1) until Sidekiq::Queue.new.size > 0 || Sidekiq::Workers.new.size > 0
end这是必需的,因为有时第一个方法可能会在作业排队前几毫秒执行,因此它根本不会等待。
发布于 2015-04-30 04:26:37
对于简单的用例,您可以轮询stats以获取每个队列的挂起作业的计数。
因此,如果您知道所有作业都进入特定队列,并且没有其他作业从其他队列进入该队列,这就足够了。有关更高级/更复杂的用例,请参阅API source
另一个简单的解决方案是使用基于Redis的计数器(因为您已经在使用Redis),并从每个作业中atomically decrement它,并在计数达到零时publish一个事件。
发布于 2017-04-06 10:44:10
你应该看到这个Sidekiq-batch gem,我已经试过了,它的工作原理和Sidekiq的Pro Batch一样,而且它是不含的
希望这能有所帮助
https://stackoverflow.com/questions/29953736
复制相似问题