Ruby初心者スレッド Part 11
■ このスレッドは過去ログ倉庫に格納されています
0480443
2007/04/14(土) 08:52:03雰囲気だけですが、こんな感じです。
それぞれのスレッドは1つのファイルをダウンロードするのに専念させてます。
require 'net/http'; Net::HTTP.version_1_2
require 'uri'
require 'set'
def download url
uri = URI(url); http = Net::HTTP.new(uri.host, uri.port)
http.request_get(uri.path + '?' + uri.query) {|res|
open(出力ファイル名, 'wb') {|out|
res.read_body {|chunk| out.write chunk}
}
}
end
thr_set = Set[] # ダウンロード中スレッドを入れるためのSet
N = 5 # スレッドの最大個数
[ダウンロードするURL].each {|url|
sleep(1) until thr_set.size < N # スレッドの個数が多すぎなくなるまで寝る
thr_set << Thread.start {
download url # ダウンロード
thr_set.delete Thread.current # 終わったらSetから削除
}
}
thr_set.each {|thr| thr.join} # メインスレッドが終了しないように、稼働中のスレッドを待つ
■ このスレッドは過去ログ倉庫に格納されています