Ruby 和 Redis,线程不处理命令

标签 ruby multithreading redis

我正在使用 redis 和 ruby​​ 并尝试在线程内发出 blpop,以便我可以等待列表上的传入项目。

问题是 blpop block 中的代码似乎从未被调用。这是我正在运行的示例代码(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

非常感谢任何帮助!

最佳答案

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

关于Ruby 和 Redis,线程不处理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651095/

相关文章:

Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

C# 静态构造函数在填充 ConcurrentDictionary 时初始化线程安全

雷迪斯。获取 where 子句

laravel - 当我们在 Laravel 中将 SESSION_DRIVER/CACHE_DRIVER 设置为 redis 时,过期时间是多少?

ruby - 重构简短的 case 语句

ruby - 如何将每个语句的结果输​​出到变量?

ruby-on-rails - 我有一个评论模型,我的观点可以用什么? @评论,:comment or comment?

android - 延迟线程也卡住其他 Activity

redis - 获取redis master哨兵

javascript - js.erb 不在 Rails 6 中渲染