[Примечание: я «исправил» эту проблему, создав и используя новый набор драгоценных камней. Мне все еще любопытно, почему возникла проблема, но она больше не блокирует меня.]
[Мне известно, что существует аналогичная проблема в тупиковой ситуации в Ruby join(), но я попробовал параметр тайм-аута, предложенный там, и это не помогает. Я подозреваю, что там не раскрыта какая-то конкретная проблема.]
Я получаю сообщение об ошибке ниже при запуске кода ниже, но только при выполнении в сеансе pry. Этот код не менялся и работал нормально в течение некоторого времени, и я понятия не имею, почему это проблема только сейчас. Я использую pry версии 0.11.3 на Ruby 2.5.1. Кроме того, этот код отлично работает при вставке в pry; это не работает в моем приложении wifi-wand, которое запускает pry в контексте одного из своих объектов (gem install wifi-wand
для установки, https://github.com/keithrbennett/wifiwand — страница проекта).
domains = %w(google.com baidu.com)
puts "Calling dig on domains #{domains}..." if @verbose_mode
threads = domains.map do |domain|
Thread.new do
output = `dig +short #{domain}`
output.length > 0
end
end
threads.each(&:join)
[1] pry(#<WifiWand::CommandLineInterface>)> ci
Calling dig on domains ["google.com", "baidu.com"]...
fatal: No live threads left. Deadlock?
3 threads, 3 sleeps current:0x00007fbd13d0c5a0 main thread:0x00007fbd13d0c5a0
* #<Thread:0x00007fbd14069c20 sleep_forever>
rb_thread_t:0x00007fbd13d0c5a0 native:0x00007fff89c2b380 int:0
/Users/kbennett/work/wifi-wand/lib/wifi-wand/models/base_model.rb:89:in `join'
/Users/kbennett/work/wifi-wand/lib/wifi-wand/models/base_model.rb:89:in `each'
/Users/kbennett/work/wifi-wand/lib/wifi-wand/models/base_model.rb:89:in `block in connected_to_internet?'
/Users/kbennett/work/wifi-wand/lib/wifi-wand/models/base_model.rb:126:in `connected_to_internet?'
/Users/kbennett/work/wifi-wand/lib/wifi-wand/command_line_interface.rb:264:in `cmd_ci'
wifi-wand -s
и ввожу ваш код (напрямую или через%edit
), он просто работает (если я не ошибаюсь) и показывает[#<Thread:0x00007ff82bafa200@(pry):5 dead>, #<Thread:0x00007ff82bafa0e8@(pry):5 dead>]
как законный результат. - person Jay Schneider   schedule 04.07.2018ci
(подключен к Интернету?) (то есть просто набравci[Enter]
в командной строке pry). Я не удивлен мыслью, что это работает для вас, потому что это всегда работало и для меня до сегодняшнего дня. - person Keith Bennett   schedule 04.07.2018