接上例:http://blog.youkuaiyun.com/kunshan_shenbin/archive/2008/12/03/3438802.aspx
这里讨论一下Ruby中如何创建多线程。
先看代码:
- require 'net/http'
- pages = %w( cn.yahoo.com www.sina.com.cn www.163.com )
- threads = []
- for page_to_fetch in pages
- threads << Thread.new(page_to_fetch) do |url|
- h = Net::HTTP.new(url, 80)
- puts "Fetching: #{url} "
- resp = h.get('/index.html', nil)
- puts "Got #{url}: #{resp.message}"
- end
- end
- threads.each {|thr| thr.join}
输出:
- Fetching: cn.yahoo.com Fetching: www.sina.com.cn Fetching: www.163.com
- Got www.sina.com.cn: OK
- Got www.163.com: OK
- Got cn.yahoo.com: OK
下面再看看如何在多线程环境下处理异常:
- threads = []
- 4.times do |number|
- threads << Thread.new(number) do |i|
- raise "Boom!" if i == 2
- print "#{i}/n"
- end
- end
- threads.each do |t|
- begin
- t.join
- rescue RuntimeError => e
- puts "Failed: #{e.message}"
- end
- end
输出:
- 0
- 1
- 3
- Failed: Boom!