我编写了一个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)
答案 0 :(得分:0)
你应该考虑在后台使用这个。
查看一些实际上不会阻挡并在后台执行操作的宝石 - 例如,DelayedJob。另外,查看一些railscast:
答案 1 :(得分:0)
创建一个从中创建新线程的线程池。这样,您将不会创建比池中提供的更多的内容,并避免崩溃应用程序/服务器。或者,看看SideKiq这是后台队列处理器的多线程替代方案,如DelayedJob和Resque。
答案 2 :(得分:-1)
threads.each {|thread| thread.join; sleep 1}