ruby-on-rails - Sidekiq-Unique-jobs Lock 仅适用于第一个 Worker,然后所有待处理的作业同时执行?
问题描述
我可以在队列中等待 3 个作业,一旦第一个作业完成,所有剩余的工作人员都会同时执行。这是为什么?我希望每个工人都得到一个锁并让其他工作等待,以序列化的方式。
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
产生以下内容:
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
解决方案
可能,您想要的只是运行时锁,而不是队列锁。您必须使用while_executing
锁类型https://github.com/mhenrixon/sidekiq-unique-jobs#while-executing。
推荐阅读
- dynamics-crm - Dynamics 365 (crm) 将假期计划的日历规则从一个系统导入到另一个系统
- algorithm - 动态哈希的方法有哪些?
- excel - 我想根据下拉选择复制一系列单元格并将它们粘贴到另一个工作表并使用按钮激活
- php - 如何检查octobercms中是否存在记录?
- amp-html - AMP 电子邮件广告 - 不支持“amp-ad”组件
- python - 使用 paramiko 远程执行命令
- apache - 如何在 Apache config 中的 http 请求上使用 x-forward-for 而不是 LB IP 读取 Client-IP
- swift - 如何在 UIImageView 上放置抖动动画
- ios - Show app's notification settings in Settings app without requesting authorisation
- python - 在多标签图像分类中使用 sigmoid 存在问题