Известно ли, что gzip.writer Python работает медленно? - PullRequest
0 голосов
/ 08 апреля 2020

Я написал скрипт для обработки CSV-файлов для моего работодателя. Обработка зависит от процессора, а файлы большие. Например, 3+ ГБ ввода дают 6+ ГБ вывода.

На моем компьютере преобразование этого текстового файла занимает почти 16 минут (что само по себе довольно долго, но я использую стоковую версию csv -модуль), около 30 секунд из которых уходит ОС (на запись вывода).

Для ударов я добавил функцию прозрачного сжатия:

if name.endswith('.gz'):
    import gzip
    return gzip.GzipFile(name, mode, 9, fd)
return fd

Когда используя сжатие, время выполнения переходит к более чем часу - хотя системное время уменьшается вдвое, потому что писать гораздо меньше.

Переход понятен, но масштаб его нет - если Я просто запускаю gzip -9 для несжатого выходного файла, это занимает всего около 13 минут.

Я могу понять, что gzip может выиграть что-то при использовании больших буферов и т. Д. c. - но встраивание сжатия в мой скрипт должно принести пользу от меньшего копирования данных. И все же, он теряет хуже, чем 2: 1: 16 минут на преобразование + 13 минут на сжатие против 61 минуты на то, чтобы сделать оба за один go.

Почему существует такое большое расхождение? Известно ли, что код zlib / gzip в Python -2.x работает медленно? Должно ли Python -3 быть лучше в этом отношении - оно значительно хуже при обработке без сжатия ...

...