Pregunta

I'm running this code from the mysql2 gem docs:

require 'mysql2/em'

EM.run do
  client1 = Mysql2::EM::Client.new
  defer1 = client1.query "SELECT sleep(3) as first_query"
  defer1.callback do |result|
    puts "Result: #{result.to_a.inspect}"
  end

  client2 = Mysql2::EM::Client.new
  defer2 = client2.query "SELECT sleep(1) second_query"
  defer2.callback do |result|
    puts "Result: #{result.to_a.inspect}"
  end
end

It runs fine, printing the results

Result: [{"second_query"=>0}]
Result: [{"first_query"=>0}]

but then the script just hangs and never returns to the command line. Any idea what is going on?

¿Fue útil?

Solución

EM.run will start an EventMachine reactor. That reactor just loops and loops and loops until you somehow tell it to stop. You can manually stop it using EM.stop.

In your case, you might want to check for the callback results and stop the reactor when both callbacks fired. Ilya's em-http-request library provides a nice interface for exactly that use case. Might be worth a look.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top