gpt4 book ai didi

ruby - ruby open-uri HTTP Streaming 是否会限制下载或保存到临时文件?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:17 24 4
gpt4 key购买 nike

我在服务器上有一个很大的 CSV 文件,我想分块下载和处理,而不是将整个文件读入内存。经过一番努力后,我想出了这个:

require open-uri

open("http://example.com/#{LARGE_CSV_FILE}") do |file|
file.each_slice(50_000) do |fifty_thousand_lines|
MyModel.import fifty_thousand_lines.join
end
end

我的理解是open-uri#open 将包装HTTP GET 并返回类似IO 的可枚举对象。 #each_slice(n) 一次将 n 行数组传递给 block 。然后我加入并处理这些行。

这导入很好,并且观察我的 OS X iStat 菜单,看起来 ruby​​ 进程的内存使用并没有失控。 但是,看起来我是一次性下载了所有文件。这怎么可能没有内存使用爆炸?

ruby 是下载到一个临时文件,然后从磁盘逐行读取吗?我原以为 open-uri 会限制 HTTP 连接,并且仅在其 block 处理完其批数据时才下载更多数据。

这是下载和处理文件而不将其全部加载到内存中的正确方法吗?

最佳答案

是的,它会下载到一个临时文件中。这很容易从控制台观察到:

2.0.0-p247 :001 > require 'open-uri'
=> true
2.0.0-p247 :002 > f = open("http://stackoverflow.com/questions/19279715/does-ruby-open-uri-http-streaming-throttle-the-download-or-save-to-a-temp-file")
=> #<Tempfile:/tmp/open-uri20140220-27172-1kcjwk2>

关于ruby - ruby open-uri HTTP Streaming 是否会限制下载或保存到临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com