Я ищу, чтобы оптимизировать размер операции чтения для файла, который слишком велик, чтобы полностью открыть его в памяти. Вот пример кода:
def read_chars(fp, BSIZE=1024):
with open(fp) as source:
size=f.seek(0,2); f.seek(0)
t0 = time.time()
chars = True
while chars:
chars = source.read(BSIZE)
for char in chars:
pass # placeholder
print ('Read %s in %.2fs' % (size, time.time() - t0))
Производительность напрямую связана с размером используемого мной буфера, по крайней мере для относительно небольших размеров буфера. Например:
>>> read2('/Users/david/Desktop/Sales1M.csv', 1024)
Read 46468331 in 0.75s
>>> read2('/Users/david/Desktop/Sales1M.csv', 10)
Read 46468331 in 1.86s
>>> read2('/Users/david/Desktop/Sales1M.csv', 2)
Read 46468331 in 5.93s
Чем объясняется огромная разница в этих числах? Сначала я думал, что времена будут почти одинаковыми, но, возможно, разница связана с количеством операций над системными файлами (?), Но хотел бы, чтобы кто-то дал более четкий ответ, почему поведение такое, как есть.