gpt4 book ai didi

ruby - 在多个线程中引用类方法会导致自动加载循环依赖崩溃

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:29 25 4
gpt4 key购买 nike

代码:

threads = []
Thread.abort_on_exception=true
begin # throw exceptions in threads so we can see them
threads << Thread.new{@a = MyClass.m1}
threads << Thread.new{@b = MyClass.m2}
threads << Thread.new{@c = MyClass.m3}

threads.each { |thr| thr.join }
rescue Exception => e
puts "EXCEPTION: #{e.inspect}"
puts "MESSAGE: #{e.message}"
end

崩溃:

.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:in load_missing_constant': 自动加载常量 MyClass 时检测到循环依赖

稍加研究后,似乎由于每个线程都引用 MyClass,因此导致 ruby​​ 自动加载出错。如果我在进行 Thread 调用之前添加一行引用 MyClass,它似乎可以防止错误。

我的问题是,是否有“正确”的方法来防止这种情况发生,或者是 ruby​​ 中的一些错误?根据 http://blog.plataformatec.com.br/2012/08/eager-loading-for-greater-good/,我的理解是自动加载是线程安全的

最佳答案

Ruby 过去在 Threaded autoload 甚至 require 方面都有问题。它已在 ruby 2.0 中修复,请参阅 bug on ruby-lang.org .

Rails 可能仍然存在 Bug [Circular dependency error with lib classes](Circular dependency error with lib classes)

解决方法是在将符号放入线程之前简单地要求或引用该符号。

require 'myclass'

defined? MyClass

关于ruby - 在多个线程中引用类方法会导致自动加载循环依赖崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com