CSV.open
будет записывать в основной ОС, когда блок закрывается, и он также будет писать каждый раз, когда буфер заполняется и очищается, что будет происходить автоматически. (В моей установке Ruby это происходит с 8196 байтами.) Вы также можете добавить csv.flush
в свой блок, чтобы заставить его писать последовательно.
require 'csv'
CSV.open('result.csv', 'wb') do |csv|
while row = next_row
csv << row # Writes to underlying OS only when buffer fills
csv.flush # Forces write to underlying OS
end
end # Writes to underlying OS and closes file handle
(Обратите внимание, что записи являются основной ОС, которая может буфер поток снова до фактического записи на диск.)
Я испытал это, запустив 'CSV.open («Foo»,«ББ ') {| x | цикл {x << [1,2,3]; sleep 0.001}} ') и посмотреть размер файла' foo' в другой оболочке. Каждые ~ 3 секунды буфер заполняется 8196 байтами и записывается на диск. –