2012-07-26 70 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}