2

私は redis と ruby​​ を使用しておりblpop、スレッド内で a を発行しようとしているので、リストの着信アイテムを待つことができます。

問題は、ブロック内のコードblpopが呼び出されないように見えることです。これが私が実行しているサンプルコードです(ruby 1.9.3):

require 'rubygems'
require 'redis'

def start_thread
  @thread = Thread.new do
    r = Redis.new
    r.blpop("test", 0) do |key, message|
      process_message(key, message)
    end
  end
  redis = Redis.new
  redis.rpush "test", "hello world"
end

def process_message(key, message)
  @message = "#{key} was sent #{message}"
end

start_thread
@thread.join
p @message

どんな助けでも大歓迎です!

4

1 に答える 1

2
require 'rubygems'
require 'redis'

def start_thread
  @thread = Thread.new do
    r = Redis.new
    key, message = r.blpop(:test, 0)
    process_message(key, message)
  end
  redis = Redis.new
  redis.rpush :test, "hello world"
end

def process_message(key, message)
  @message = "#{key} was sent #{message}"
end

start_thread
@thread.join
p @message
于 2012-09-29T08:20:35.083 に答える