私はスレッドからエラーをキャッチして、すべてのスレッドが完了したらそのエラーを再スローするにはどうすればよいですか?
gem 'concurrent-ruby'
...私はスレッドを管理するためのこの宝石を持っているRailsの5を使用しています私は私のいずれかのスレッドがエラーをスローした場合、それはちょうど飲み込んだと私はそれを知ることはありませんされていることに気づきます。私は、プールからのスレッドのいずれかがエラーをスローした場合、すべてのスレッドが完了したとき、私は私のプログラムを停止し、例外を投げることができるか、疑問に思ったコンソール
pool = Concurrent::FixedThreadPool.new(1)
# => #<Concurrent::FixedThreadPool:0x007fe3585ab368 @__lock__=#<Thread::Mutex:0x007fe3585ab0c0>, @__condition__=#<Thread::ConditionVariable:0x007fe3585ab098>, @min_length=1, @max_length=1, @idletime=60, @max_queue=0, @fallback_policy=:abort, @auto_terminate=true, @pool=[], @ready=[], @queue=[], @scheduled_task_count=0, @completed_task_count=0, @largest_length=0, @ruby_pid=23932, @gc_interval=30, @next_gc_time=252232.13299, @StopEvent=#<Concurrent::Event:0x007fe3585aaf30 @__lock__=#<Thread::Mutex:0x007fe3585aaeb8>, @__condition__=#<Thread::ConditionVariable:0x007fe3585aae90>, @set=false, @iteration=0>, @StoppedEvent=#<Concurrent::Event:0x007fe3585aadc8 @__lock__=#<Thread::Mutex:0x007fe3585aad78>, @__condition__=#<Thread::ConditionVariable:0x007fe3585aad50>, @set=false, @iteration=0>>
nums.each do |num|
pool.post do
if num == 1
asdfasdf
end
end
end
# => [1, 2, 3]
pool.shutdown # => true
pool.wait_for_termination # => true
でこれを試してみました。いずれのスレッドもエラーをスローしない場合は、何が起きていても問題はありません。
上記のように、私は意図的にエラーが発生する条件が発生することに気づくでしょうが、スレッドプールが例外の出力を飲み込んでいると推測するので、私は決してそれについては知りません。
setting'Thread場合、私は好奇心が強いだろう。abort_on_exception = true'で違いがあります –
上記のコードを実行する前にその文を実行しましたが、何も起こっていません。 –