如何将resque队列限制为单个worker并保证使用该worker的作业进程?

时间:2013-09-17 14:33:50

标签: ruby-on-rails-3 resque

我有一套设备(比如设备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个工作进行测试......

由于设备队列中的作业正在使用指定为根队列的工作程序,因此无效。

0 个答案:

没有答案