Проблемы с потоками в OSX и Ruby 1.9.2

Выполнение следующего кода в IRB:

t = Thread.new { loop { puts 'Hi' } }

Я получаю одно сообщение привет и больше ничего не выводит. Только если я начинаю нажимать клавишу ввода, я получаю вывод, как и ожидалось, до тех пор, пока я не перестану нажимать клавишу ввода.

Если я выполню t.join, все будет работать так, как ожидалось.

Проблема возникает в IRB, pry и ripl с использованием ruby ​​1.9.2-p180 и 1.9.2-p290 под rvm 1.8.0 в OSX 10.7 и rvm 1.6.20 в OSX 10.6.

readline устанавливается через rvm pkg install readline

Спасибо за любое понимание


person Ari Russo    schedule 29.09.2011    source источник
comment
Вопрос о коде или коде, как он работает в IRB? IRB делает странные вещи под капотом, так что это совсем другие вопросы.   -  person Bill Dueber    schedule 29.09.2011
comment
Так как работает в IRB и ripl. Я знаю, что IRB дурацкий, но это не значит, что проблема вызвана IRB/ripl или непреодолима, если это так.   -  person Ari Russo    schedule 29.09.2011
comment
Когда я запускаю код из файла .rb, он работает так, как я ожидаю закрытия без единого приветствия. Затем я попробовал следующий код как из файла, так и из irb Thread.new{ loop{ puts 'Hi'; sleep 2} }. Кажется, что irb все равно оставляет поток запущенным.   -  person derp    schedule 29.09.2011
comment
Это противоположно тому, что я вижу. Когда я запускаю этот код в IRB, он спит, пока я не удерживаю клавишу ввода.   -  person Ari Russo    schedule 29.09.2011
comment
Странно, для меня на irb этот последний фрагмент кода продолжает печатать «Привет» каждые 2 секунды. Я предполагаю, что тогда это действительно имеет отношение к irb больше, чем к коду.   -  person derp    schedule 29.09.2011
comment
Ну, это также происходит для меня с pry и ripl, кроме IRB. Я думаю, что это что-то о том, как Ruby настроен в моей среде. У меня это происходит как в OSX 10.6, так и в 10.7. Можете ли вы описать свою среду OS/Ruby?   -  person Ari Russo    schedule 29.09.2011
comment
Я сейчас на Windows7 ruby1.9.2p180. Другой вопрос, который вы обнаружили, был почти идентичен этому, также был запущен OSX, поэтому я исследовал, есть ли какая-то информация об этом, но не смог найти ничего полезного. Было бы обидно, если бы и этот вопрос остался без ответа.   -  person derp    schedule 29.09.2011
comment
Спасибо, да, у меня отлично работает и в Windows, и в Linux. Почти уверен, что это что-то с реализацией Ruby - это OSX. Хотя большое спасибо за помощь   -  person Ari Russo    schedule 29.09.2011
comment
Пожалуйста, укажите как ответ и отметьте его как ответ через 2 дня   -  person jschorr    schedule 30.09.2011


Ответы (1)


Некоторые версии readline для OS X блокируются. Если вы столкнулись с описанным выше поведением, вы можете отключить readline, поставив

IRB.conf[:USE_READLINE] = false

в .irbrc

person Ari Russo    schedule 30.09.2011