【发布时间】:2017-10-19 08:55:01
【问题描述】:
我有 2 个 Sidekiq 工人:
富:
# frozen_string_literal: true
class FooWorker
include Sidekiq::Worker
sidekiq_options queue: :foo
def perform
loop do
File.open(File.join(Rails.root, 'foo.txt'), 'w') { |file| file.write('FOO') }
end
end
end
酒吧:
# frozen_string_literal: true
class BarWorker
include Sidekiq::Worker
sidekiq_options queue: :bar
def perform
loop do
File.open(File.join(Rails.root, 'bar.txt'), 'w') { |file| file.write('BAR') }
end
end
end
具有几乎相同的功能,都在不同的队列上运行,yaml 文件如下所示:
---
:queues:
- foo
- bar
development:
:concurrency: 5
问题是,即使两者都在运行并显示在 Sidekiq UI 的Busy 页面中,也只有其中一个会真正创建文件并放入内容。Sidekiq 不应该是多线程的吗?
更新:
- 这只发生在我的机器上
- 我创建了一个新项目,使用新的和相同的轨道
- 我克隆了一个同事项目并运行了他的 sidekiq 并且正在工作!!!
- 我用的是他的sidekiq版本,不行!
新更新:
- 如果我的同事克隆了我的项目,这也会发生在我的同事机器上
- 如果我使用有限循环运行 2 个作业(例如 10 次在睡眠中执行某项操作),第一个作业将被执行,然后是第二个,但在第二个作业完成并重新开始后,两者都将按预期在同一时间工作 - - 从github.com/ArayB/sidekiq-test 克隆项目的每个人都遇到了问题。
【问题讨论】:
-
你的机器和同事的机器有什么区别?操作系统?
-
MacOS 两者。只要我测试多个案例,我就会更新更新列表。
-
你能测试更新吗?
标签: ruby-on-rails ruby concurrency parallel-processing sidekiq