Вам вообще не нужно использовать Thread.new здесь, на самом деле это не безопасно для потоков (сам механизм обработки событий не безопасен для потоков, за исключением EM :: Queue, EM :: Channel и EM.schedule).
Если вы хотите выполнять синхронные действия в execute, и у вас должен быть этот поток, то вы захотите вызвать h.send через EM.schedule, например:
EM.schedule { h.send("welcome!") }
Если у вас должен быть этот поток таким образом, то вы хотите перехватывать исключения из потока, который вы сами создали.Затем вы должны остановиться и выключиться самостоятельно или просто поднять назад в главном потоке (eventmachine):
EM.run do
thread = Thread.new do
raise 'boom'
end
EM.add_periodic_timer(0.1) { thread.join(0) }
end
Приведенный выше шаблон может легко просто перечислить массив потоков в периодическом таймере, еслиУместно.
Наконец, обратите внимание, что всплывающее сообщение об исключении (правильный отчет об исключении) поддерживается только в EventMachine> 1.0, который все еще находится в бета-версии.Чтобы получить полезные трассировки, когда возникают исключения, либо gem install eventmachine --pre
, либо лучше, используйте мастер из репозитория Github.