在EventMachine中挂起MySQL2连接

时间:2013-09-26 02:07:11

标签: mysql ruby rubygems eventmachine

我正在运行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

运行正常,打印结果

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

然后脚本挂起并且永远不会返回命令行。知道发生了什么事吗?

1 个答案:

答案 0 :(得分:0)

EM.run将启动一个EventMachine反应器。那个反应堆只是循环,循环和循环,直到你以某种方式告诉它停止。您可以使用EM.stop手动停止它。

在您的情况下,您可能希望检查回调结果并在两个回调触发时停止反应器。 Ilya的em-http-request库为这个用例提供了一个很好的interface。可能值得一看。