0

我编写了一个 ruby​​ 脚本,其中包含要下载的文件列表(~250)。由于顺序下载需要很长时间。我想在一个单独的线程中下载每个文件。尽管我给出了 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。另外,查看一些 railscasts :

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 回答