Ruby和Redis,线程不处理命令
我正在使用redis和ruby,并试图在线程中发出一个Ruby和Redis,线程不处理命令,ruby,multithreading,redis,Ruby,Multithreading,Redis,我正在使用redis和ruby,并试图在线程中发出一个blpop,这样我就可以等待列表中的传入项 问题是blpop的块中的代码似乎从未被调用。下面是我正在运行的示例代码(ruby 1.9.3): 非常感谢您的帮助 谢谢你的回复。我尝试了你的代码,但仍然收到@消息返回nil。另外,我不确定为什么在方法中声明实例变量是一种不好的做法。你能进一步解释吗?嗯。。。原因方法不是实例。。。我想是吧。我不是专家,但我相信它们应该只用于对象。无论如何,在我看来,“r”是空的,所以blpop不应该一直等到列表中有
blpop
,这样我就可以等待列表中的传入项
问题是blpop
的块中的代码似乎从未被调用。下面是我正在运行的示例代码(ruby 1.9.3):
非常感谢您的帮助 谢谢你的回复。我尝试了你的代码,但仍然收到
@消息
返回nil
。另外,我不确定为什么在方法中声明实例变量是一种不好的做法。你能进一步解释吗?嗯。。。原因方法不是实例。。。我想是吧。我不是专家,但我相信它们应该只用于对象。无论如何,在我看来,“r”是空的,所以blpop不应该一直等到列表中有东西要弹出吗?这是正确的,直到创建线程之后,当我们在它之后执行redis.rpush“test”,“hello world”
。至少,当我在看redis控制台的时候,我能看到这一点。哦。。。这里是错误。您正在推送到一个不同的列表:)redis.rpush“test”,“hello world”
其中“test”
是推送到的关键。
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
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