0

我从 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}]

但随后脚本只是挂起并且永远不会返回到命令行。知道发生了什么吗?

4

1 回答 1

0

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

在您的情况下,您可能想要检查回调结果并在两个回调触发时停止反应器。Ilya 的 em-http-request 库为该用例提供了一个很好的接口。也许值得一瞧。

于 2013-09-26T13:49:46.207 回答