まず、普通のクエリを投げてみる。
require 'rubygems' require 'mysqlplus' my = Mysql.connect('localhost', 'root', '', 'mysql') my.query("select sleep(10)") #my.send_query("select sleep(10)") my.close
当然、10秒かかる。
~/work# time ruby foo.rbreal 0m10.250s
user 0m0.170s
sys 0m0.080s
つづいて、非同期にクエリを投げてみる。
require 'rubygems' require 'mysqlplus' my = Mysql.connect('localhost', 'root', '', 'mysql') #my.query("select sleep(10)") my.send_query("select sleep(10)") my.close
こっちは、すぐ終わる…と。
~/work# time ruby foo.rbreal 0m0.250s
user 0m0.200s
sys 0m0.050s
結果を取得する
非同期クエリの結果はMysql#get_resultで得られる。
require 'rubygems' require 'mysqlplus' my = Mysql.connect('localhost', 'root', '', 'mysql') my.send_query("show tables") puts 'wait...' sleep 3 my.get_result.each_hash do |row| p row end
~/work# ruby foo.rb | head -n 5
wait...
{"Tables_in_mysql"=>"columns_priv"}
{"Tables_in_mysql"=>"db"}
{"Tables_in_mysql"=>"func"}
{"Tables_in_mysql"=>"help_category"}