我有一套设备(比如设备1-10),每个设备都需要同步处理。对于生成的每个队列,我使用1个worker设置一个新队列,然后将enqueue_to排队到特定设备_#{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)。这是一种强制设备队列“同步”运行的尝试,从而保证设备一次只有1个工作进行测试......
由于设备队列中的作业正在使用指定为根队列的工作程序,因此无效。