2011-08-09 13 views
3

ルビーでマルチスレッドを使用して、同時に多数のネットワーク接続を稼働させようとしていますが、基本的には固執しています。複数のファイルを同時にダウンロードする(マルチスレッド)

私はこれを試してみました:

for i in 1..1000 do 
    Thread.new{load(i)} 
end 

def load(i) 
    File.open(filePath, "w") do |output| 
    open(imageURL) do | input | 
     output << input.read 
    end 
    end 
end 

これは私がやっている示すためのダウンロード・スクリプトの一部でしかありません。実際に私はいくつかのHTMLを読み込み、Nokogiriなどと解析します。

"ruby script.rb"という名前のターミナルでこのスクリプトを実行していますが、何も起こりませんでした。

これを解決する方法はありますか?

おかげallot クリス

+0

あなたは[この記事](http://andrey.chernih.me/2014/05/29/downloading-multiple-files-inに興味があるかもしれません-ruby-simultane /)は、複数のファイルを同時にダウンロードする3つの方法を比較します。 –

答えて

2

あなたのスレッドが終了するのを待って、あなたがされていないので、あなたのスクリプトはすぐに、終了します。

this section of the Pickaxeの最初の例を考えてみましょう。すべてのスレッドが完了するまで実際に待機するには、スレッドをjoinにする必要があります。

だからではなく、これを試してみてください:

def load(i) 
    ... 
end 

threads = [] 

for i in 1..1000 do 
    threads << Thread.new { load(i) } 
end 

threads.each { |t| t.join } 
関連する問題