我有一组设备(比如设备 1-10),每个设备都需要同步处理。对于生成的每一个,我都设置了一个带有 1 个工作人员的新队列,然后 enqueue_to 特定的 device_#{num} 队列。但是,这些作业由其他工作人员处理,而不是分配给他们的队列下的工作人员(这会破坏尝试的同步行为)。
def self.run_queue(queue_name, root_path, env, count = 1)
pid_name = "#{queue_name}"
pid_file = "#{root_path}/tmp/pids/#{pid_name}.pid"
cmd = ["RAILS_ENV=#{env}",
"rake resque:work QUEUE=#{pid_name}",
"COUNT=#{count} BACKGROUND=yes",
"PIDFILE=#{pid_file}",
">> #{root_path}/log/#{pid_name}.log"].join(' ')
%x(#{cmd}) unless is_pid_running("#{pid_name}")
end
更多解释:
根队列运行许多不同的作业。这是由多个工人设置的。但是,有些工作需要设备测试。这些单独的作业可以连接到设备并运行必要的测试。我们一次只能针对单个设备运行 1 个作业。作业连接、运行测试、检查日志、转储日志,然后断开连接。完成此操作后,该特定设备队列的下一个作业可以运行。
现在我用 1 个工作人员 (COUNT=1) 设置了这些单独的设备队列。这是试图强制设备队列“同步”运行,从而保证设备一次只有一个作业对其进行测试......
这行不通,因为设备队列中的作业正在使用指定给根队列的工作人员。