线程内的ActiveRecord太慢了

时间:2014-11-06 19:21:13

标签: ruby multithreading activerecord

我有问题。我有几个代码块,必须并行和独立工作,但可以有一些连接点,如线程安全队列。我没有使用rails,这只是一个ruby脚本。但我使用的是activerecord。当我在主ruby线程中调用一个activerecord模型时,它就可以了,选择大约需要0.3毫秒。但是如果我在一个创建的线程中调用一个activerecord模型,就像:

Thread.new do
  3.times {
    SomeModel.find(3)
  }

end

现在需要400毫秒。为什么会发生这种情况以及做什么,以降低请求执行时间?

1 个答案:

答案 0 :(得分:1)

我发现这是ActiveRecord从主线程获得连接,在那里它建立了连接。在每个线程中重新建立连接就可以了。另一种方法是覆盖activerecord中的current_connection方法以共享线程之间的连接。