Ruby:使用Threads时检测到循环依赖

时间:2014-08-31 10:48:48

标签: ruby-on-rails ruby multithreading

当我运行此代码时,在9/10的情况下,Rails会引发RuntimeError: 自动加载常量SearchEngine时检测到循环依赖性

def search
  ts_start = Time.now
  results = []
  threads = []
  @engines.each do |name|
    threads << Thread.new do
      engine = "#{name.capitalize}Engine".constantize.new @params, @location
      results << engine.search  
      Thread.exit if results.length == @engines.length || (Time.now - ts_start) > @timeout
    end
  end
  threads.each { |t| t.abort_on_exception = false; t.join }
  unless results.length == 0 then
    # do some stuff...
  end
end

但是,当我创建新的&#39;引擎&#39;实例在新线程之前:

engine = "#{name.capitalize}Engine".constantize.new @params, @location    
threads << Thread.new do
  results << engine.search  

然后它在9/10案件中运行良好。但它仍然不是100%。

当我根本不使用线程时,它每次都运行良好。

有关如何修改代码的任何建议吗?

0 个答案:

没有答案