EventMachine.spawn блокировка потока - PullRequest
0 голосов
/ 12 января 2019

Пробуя простой пример с eventmachine и deferrable, я не смог заставить код работать так, как ожидалось. Я ожидал, что следующий код не будет блокироваться при вызове работы на Рабочем, и после отправки двух последовательных сообщений на сервер клиент получит два уведомления «Запланированное задание» до завершения работы первого Рабочего. Если я явно создаю поток вместо EM.spawn, он работает как положено. Как я могу заставить его работать внутри eventmachine?

class Worker
  include EM::Deferrable

  def work
    3.times do |i|
      sleep 1
    end

    set_deferred_status :succeeded
  end
end

module Handler
  def receive_data(message)
    EM.spawn do
      worker = Worker.new
      worker.callback { puts "Finished" }
      worker.work
    end.notify

    send_data("Job Scheduled...")
  end
end


EventMachine::run do
  EventMachine::start_server "localhost", 8081, Handler
  puts 'running server on 8081'
end

Спасибо! * * 1004

...