Подождите, пока в Ruby не уйдет поток
Похоже, что в Ruby 2.4 и 2.5 потоки не умирают, как только вы вызываете #kill
на них. Этот фрагмент кода напечатает Не мертвый несколько раз:
thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?
Я хотел бы заблокировать выполнение основного потока, пока вторичный поток не будет уничтожен. Я пытался с помощью thread.join.kill
, но, конечно, это блокирует основной поток, потому что цикл потока никогда не заканчивается.
Как я могу убедиться, что поток завершен до того, как основной поток продолжится?
1 ответ
Решение
Догадаться; ты еще можешь #join
нить после убийства, так что вы можете использовать thread.kill.join
блокировать до тех пор, пока нить не умрет.
Этот код никогда не печатает Не мертв:
thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
Я делаю это:
thread = Thread.new { loop {} }
thread.kill
sleep 0.001 while thread.alive?
Вот как я завершаю темы в моем ThreadPool.