0

ダウンロードするファイル (~250) のリストを含む ruby​​ スクリプトを作成しました。順次ダウンロードには時間がかかるためです。各ファイルを個別のスレッドでダウンロードすることを考えました。遅延を 20 に設定しましたが、すべてのスレッドが一度にサーバーにヒットしているように見えます。したがって、502 エラーが発生し、ファイルがダウンロードされません。サーバーに過負荷をかけることなく、すべてのファイルを並行してダウンロードするにはどうすればよいですか。

#list of fiiles
files = []
threads = []  
files.each do |file|
   threads  << Thread.new(file){ | file |
     sleep(20)  
     #Download the file using either curb or Net::HTTP
     sleep(20)
}
end

threads.each(&:join)
4

3 に答える 3

0

これをバックグラウンドで使用することを検討する必要があります。

実際にブロックせず、バックグラウンドで処理を実行するいくつかのgemを確認してください(DelayedJobなど)。また、いくつかのrailscastをチェックしてください:

http://railscasts.com/episodes/128-starling-and-workling

http://railscasts.com/episodes/128-starling-and-workling

于 2012-07-26T06:41:58.187 に答える
0

新しいスレッドが作成されるスレッドプールを作成します。このようにして、プールで提供されているものを超えて作成することはなく、アプリ/サーバーのクラッシュを回避できます。または、SideKiqをご覧ください。これは、DelayedJobやResqueなどのバックグラウンドキュープロセッサのマルチスレッド代替手段です。

于 2012-07-26T06:44:36.430 に答える
-1
threads.each {|thread| thread.join; sleep 1}
于 2015-01-03T09:22:09.800 に答える