在我的控制器中,我有:
@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
如何并行启动这两个命令?
谢谢。
答案 0 :(得分:1)
如果您正在使用复杂的对象创建,但是需要向用户提供快速响应,那么最好将对象创建作业排队,以便在系统上自行处理它们在你的行动中,时间而不是整个过程。
您可以查看可用的various background job gems。在我正在使用的当前应用程序上,更新被异步地放入Resque队列,然后被拉出并尽可能在数据库上执行操作。这种方法可以很好地工作,并且在云环境中是相当标准的。
如果您需要前面提供的数据,那将无法正常工作,但您可以创建简单的代理对象以返回视图中的大部分数据,或者只是执行异步更新并维护前端版本的数据模型也是如此。