スレッドにいるときにライブラリクラスにアクセスできないのはなぜですか?
-
21-09-2019 - |
質問
なぜ次のものがありますか
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
解決
Biorubyライブラリ(または少なくとも一部のバージョン)は、AutoLoadを使用しています。 Autoloadはスレッドセーフではない(少なくともRuby 1.8では)。したがって、2つのスレッドがBio :: Alignmentに同時にアクセスしている場合、エラーが発生する可能性があります。
所属していません StackOverflow