Почему я не могу получить доступ к некоторым классам библиотеки, когда я в потоке? - PullRequest
0 голосов
/ 20 января 2010

Почему следующие

require "bio"

threads = (1..2).map do
  Thread.new do
    seqs = ["gattaca"] * 5
    alignment = Bio::Alignment.new(seqs)
  end
end

threads.each {|th| th.join} ; nil

выдать это сообщение об ошибке?

NameError: uninitialized constant Bio::Alignment
    from (irb):6
    from (irb):10:in `join'
    from (irb):10
    from (irb):10:in `each'
    from (irb):10

1 Ответ

1 голос
/ 20 января 2010

Библиотека bioruby (или, по крайней мере, некоторые ее версии) использует автозагрузку. Автозагрузка не поддерживает потоки (по крайней мере, в ruby ​​1.8), поэтому, если два потока одновременно обращаются к Bio :: Alignment, вы можете получить ошибки.

...