Rails中的多线程与后台作业

时间:2015-05-22 15:51:22

标签: ruby-on-rails ruby multithreading

我有一个应用程序向Web服务API发出数千个请求。每个请求大约需要2秒,然后响应在数据库中创建新记录。我想尽可能多地触发这些请求,并在收到响应后立即将响应保存到数据库中。

这是我应该使用像sidekiq这样的宝石,还是红宝石Thread类?我不想只是同步处理请求。

1 个答案:

答案 0 :(得分:2)

听起来你需要一个thread pool来执行操作,还有一个数据库线程来提交结果。

您可以简单地构建其中一个:

require 'thread'

db_queue = Queue.new

Thread.new do
  while (item = db_queue.pop)
    # ... Deal with item in queue
  end
end

# Example of supplying a job

db_queue.push(api_response)

# When finished
db_queue.push(nil)

由于标准Ruby运行时中的全局解释器锁,线程仅对管理许多轻载线程非常有用。如果您需要更重要的东西,JRuby可能是您正在寻找的东西。