我有一个应用程序向Web服务API发出数千个请求。每个请求大约需要2秒,然后响应在数据库中创建新记录。我想尽可能多地触发这些请求,并在收到响应后立即将响应保存到数据库中。
这是我应该使用像sidekiq这样的宝石,还是红宝石Thread
类?我不想只是同步处理请求。
答案 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可能是您正在寻找的东西。