首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调用另一个方法之前等待并行Sidekiq Workers全部完成?

如何在调用另一个方法之前等待并行Sidekiq Workers全部完成?
EN

Stack Overflow用户
提问于 2015-04-30 04:19:01
回答 3查看 5K关注 0票数 7

我有几个工作进程正在使用Sidekiq运行,并使用Sidetiq进行调度。我正在寻找关于在执行回调之前等待所有工作人员完成的最佳方式的建议,类似于Sidekiq-Pro的批处理功能。任何关于可能的选择的建议都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2016-03-02 21:12:17

你可以写一个方法:

代码语言:javascript
复制
def wait_for_sidekiq
  sleep(1) until Sidekiq::Workers.new.size == 0 && Sidekiq::Queue.new.size == 0
end

我还建议您首先确保作业已排队:

代码语言:javascript
复制
def wait_for_queuing
  sleep(1) until Sidekiq::Queue.new.size > 0 || Sidekiq::Workers.new.size > 0
end

这是必需的,因为有时第一个方法可能会在作业排队前几毫秒执行,因此它根本不会等待。

票数 5
EN

Stack Overflow用户

发布于 2015-04-30 04:26:37

对于简单的用例,您可以轮询stats以获取每个队列的挂起作业的计数。

因此,如果您知道所有作业都进入特定队列,并且没有其他作业从其他队列进入该队列,这就足够了。有关更高级/更复杂的用例,请参阅API source

另一个简单的解决方案是使用基于Redis的计数器(因为您已经在使用Redis),并从每个作业中atomically decrement它,并在计数达到零时publish一个事件。

票数 3
EN

Stack Overflow用户

发布于 2017-04-06 10:44:10

你应该看到这个Sidekiq-batch gem,我已经试过了,它的工作原理和Sidekiq的Pro Batch一样,而且它是不含

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29953736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档