2

我有一组设备(比如设备 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) 设置了这些单独的设备队列。这是试图强制设备队列“同步”运行,从而保证设备一次只有一个作业对其进行测试......

这行不通,因为设备队列中的作业正在使用指定给根队列的工作人员。

4

0 回答 0