用于创建对象的rails中的线程

时间:2014-08-06 09:05:53

标签: ruby-on-rails multithreading

在我的控制器中,我有:

@a = Myobject.new params
@b = Myobject.new params2

models文件夹中,我有一个类(没有模型):

class Myobject
 attr_accessor: :var1, :var2, :var3
 def initialize params
  # Some processes with SQL queries and classes variables.
  @var1 = result_of_a_sql_query
  @var2 = a_hash
  @var3 = params[:varpost]
 end
end

但它很慢。 我想并行启动这2个对象创建。 (带线程或其他)

我试过了:

t1 = Thread.new {@a = Myobject.new params}
@b = Myobject.new params2
t1.join

但我收到了一个错误:Circular dependency detected while autoloading constant Myobject

如何并行启动这两个命令?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您正在使用复杂的对象创建,但是需要向用户提供快速响应,那么最好将对象创建作业排队,以便在系统上自行处理它们在你的行动中,时间而不是整个过程。

您可以查看可用的various background job gems。在我正在使用的当前应用程序上,更新被异步地放入Resque队列,然后被拉出并尽可能在数据库上执行操作。这种方法可以很好地工作,并且在云环境中是相当标准的。

如果您需要前面提供的数据,那将无法正常工作,但您可以创建简单的代理对象以返回视图中的大部分数据,或者只是执行异步更新并维护前端版本的数据模型也是如此。