首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sidekiq-Unique-jobs Lock只适用于第一个Worker,然后所有挂起的作业都会同时执行?

Sidekiq-Unique-jobs Lock只适用于第一个Worker,然后所有挂起的作业都会同时执行?
EN

Stack Overflow用户
提问于 2021-01-27 12:40:49
回答 1查看 327关注 0票数 0

我可以在队列中挂起3个作业,一旦第一个作业完成,所有剩余的作业都会同时执行。为什么会这样呢?我希望每个worker都获得一个锁,并以序列化的方式让其他作业等待。

代码语言:javascript
复制
class StuffWorker
  include Sidekiq::Worker
  sidekiq_options lock: :until_executed,
                  lock_timeout: 999,
                  lock_info: true,
                  lock_args_method: :lock_args

  def self.lock_args(args)
    [args[0], args[1]]
  end

  def perform(company_id, person_id)
    sleep 10
    logger.info "STARTING IT! at #{DateTime.now.strftime('%H:%M:%S')}"
  end
end

生成以下内容:

代码语言:javascript
复制
JID-ce8c692b5341adb7a24584ab INFO: STARTING IT! at 23:29:52
JID-ce8c692b5341adb7a24584ab INFO: done: 10.728 sec
JID-ca8dac1cbd7cbaf5d87f6096 INFO: STARTING IT! at 23:30:02
JID-463bfe792775e1412d3c0af7 INFO: STARTING IT! at 23:30:02
JID-463bfe792775e1412d3c0af7 INFO: done: 17.754 sec
JID-ca8dac1cbd7cbaf5d87f6096 INFO: done: 14.024 sec
EN

回答 1

Stack Overflow用户

发布于 2021-01-27 21:03:41

可能,你想要的只是一个运行时锁,而不是队列锁。您必须使用while_executing锁类型https://github.com/mhenrixon/sidekiq-unique-jobs#while-executing

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

https://stackoverflow.com/questions/65912966

复制
相关文章

相似问题

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