0

我正在使用 redis pub/sub withing resque worker,resque 在第一份工作后挂起,我的工作任务是阻塞性质的。我的理解是 resque 为每个新工作分配一个新线程。

我的工人如下

class SendInvitation
  @queue = :outbound_dialer
  def self.perform(contact_type, contact_no, invitation_audio_file)
    @invitationManager = DRbObject.new_with_uri(DRB_SERVER_URL)

    task_id = @invitationManager.send_invitation(contact_type, contact_no, invitation_audio_file)
    puts task_id+"is the currents task id"
    $redis = Redis.new(:timeout=>REDIS_TIMEOUT)
    $redis.subscribe('outbound_dialer') do |on|
      on.message do |channel, msg|
        data = JSON.parse(msg)
        if(data['id'] == task_id)
          puts 'here'
          @invitationManager = nil
          # exit
        end
      end
    end
  end
end

ps -ef 结果

这里线程 5784 正在阻塞 resque 任务,一旦我终止当前处理任务,resque 就开始下一个任务,并在完成该根 3595 1 0 14:14 后再次开始等待?00:00:34 /usr/bin/ruby1.9.1 /usr/local/bin/resque-web root 5370 1887 0 15:40 pts/1 00:00:04 resque-2.0.0.pre.1:分叉 5784在 1363947580 根 5784 5370 0 15:49 pts/1 00:00:00 resque-2.0.0.pre.1:处理 outbound_dialer 自 1363947580 [SendInvitation] 根 5803 2140 0 15:49 pts/2 00:00:00 grep --color=auto resque

我已经尝试过 COUNT=5

4

1 回答 1

0

Resque 确实为一项工作分叉了一个新进程(不是线程)。然后它等待工人完成并抓住下一个工作。如果您想要更多并行运行的作业 - 运行更多 resque 工作进程。

于 2013-03-22T10:58:09.513 回答