f.read различия ввода / вывода - PullRequest
0 голосов
/ 10 марта 2020

Я ищу, чтобы оптимизировать размер операции чтения для файла, который слишком велик, чтобы полностью открыть его в памяти. Вот пример кода:

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

Чем объясняется огромная разница в этих числах? Сначала я думал, что времена будут почти одинаковыми, но, возможно, разница связана с количеством операций над системными файлами (?), Но хотел бы, чтобы кто-то дал более четкий ответ, почему поведение такое, как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...