2012-07-26 103 views
0

我寫了一個ruby腳本,其中包含要下載的文件列表(〜250)。由於順序下載需要很長時間。我想在單獨的線程中下載每個文件。儘管我已經給出了20的延遲,但它看起來像所有的線程一次觸擊服務器。因此,我得到502錯誤,並沒有下載任何文件。如何在不超載服務器的情況下並行下載所有文件。延遲使用ruby線程

#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) 
+1

你的線程都具有相同的延遲,你一次啓動它們。 – Yossi 2012-07-26 06:46:08

回答

0

創建從中創建新線程的線程池。這樣,您不會創建比池中提供的更多的內容,並避免崩潰應用程序/服務器。或者,看看SideKiq這是一個多線程替代後臺隊列處理器,如DelayedJob和Resque。

-1
threads.each {|thread| thread.join; sleep 1}