0

resque ワーカーで redis pub/sub を使用しています。最初のジョブの後に 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 ルート 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: 1363947580 [SendInvitation] ルート 5803 2140 0 15:49 pts/2 00:00:00 から outbound_dialer を処理中--color=自動レスキュー

私はすでに COUNT=5 を試しました

4

1 に答える 1

0

Resque は実際、ジョブの新しいプロセス (スレッドではない) をフォークします。次に、ワーカーが終了するのを待って、次のジョブを取得します。並行して実行するジョブを増やしたい場合は、より多くの resque ワーカー プロセスを実行します。

于 2013-03-22T10:58:09.513 に答える