我正在运行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}]
然后脚本挂起并且永远不会返回命令行。知道发生了什么事吗?
答案 0 :(得分:0)
EM.run
将启动一个EventMachine反应器。那个反应堆只是循环,循环和循环,直到你以某种方式告诉它停止。您可以使用EM.stop
手动停止它。
在您的情况下,您可能希望检查回调结果并在两个回调触发时停止反应器。 Ilya的em-http-request库为这个用例提供了一个很好的interface。可能值得一看。