Я написал скрипт для обработки 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 быть лучше в этом отношении - оно значительно хуже при обработке без сжатия ...