Оценка размера почтового индекса / времени создания - PullRequest
7 голосов
/ 20 апреля 2009

Мне нужно создавать ZIP-архивы по требованию, используя либо модуль zipfile Python, либо утилиты командной строки unix.

Ресурсы для архивации часто> 1 ГБ и не обязательно для сжатия.

Как эффективно оценить время и размер создания?

Ответы [ 4 ]

15 голосов
/ 20 апреля 2009

Извлечь кучу мелких деталей из большого файла. Может быть, 64 куска по 64 КБ каждый. Произвольно выбран.

Объединить данные, сжать их, измерить время и степень сжатия. Поскольку вы случайно выбрали части файла, есть вероятность, что вы сжали репрезентативное подмножество данных.

Теперь все, что вам нужно сделать, это оценить время для всего файла на основе времени ваших тестовых данных.

3 голосов
/ 20 апреля 2009

Я предлагаю вам измерить среднее время, необходимое для изготовления почтового индекса определенного размера. Затем вы рассчитываете оценку по этой мере. Однако я думаю, что оценка будет очень грубой в любом случае, если вы не знаете, насколько хорошо сжимаются данные. Если данные, которые вы хотите сжать, каждый раз имели очень похожий «профиль», вы, вероятно, могли бы делать более точные прогнозы.

1 голос
/ 20 апреля 2009

Если возможно получить обратные вызовы прогресса из модуля python, я бы посоветовал выяснить, сколько байтов обрабатывается за секунду (просто сохраняя, где в файле вы находитесь, где в начале секунды, и где вы находитесь в конце) , Когда у вас есть данные о том, насколько быстро работает ваш компьютер, вы можете сохранить его и использовать его в качестве основы для следующего zip-файла. (Обычно я собираю около 5 образцов, прежде чем показывать прогноз времени)

Использование этого метода может дать вам минуты Microsoft , так что, когда вы получите больше образцов, вам нужно будет усреднить их. Это может иметь место, если вы создаете zip-файл, который содержит много файлов, поскольку ZIP имеет тенденцию замедляться при сжатии большого количества маленьких файлов по сравнению с 1 большим файлом.

0 голосов
/ 20 апреля 2009

Если вы используете метод ZipFile.write () для записи файлов в архив, вы можете сделать следующее:

  1. Получить список файлов, которые вы хотите сжать и их относительные размеры
  2. Запишите один файл в архив и сколько времени это заняло
  3. Рассчитать ETA на основе количества записанных файлов, их размера и количества оставшихся.

Это не сработает, если вы архивируете только один действительно большой файл. Я никогда не использовал модуль zip сам, поэтому я не уверен, что он будет работать, но для небольшого количества больших файлов, возможно, вы могли бы использовать функцию ZipFile.writestr () и читать / архивировать ваши файлы порциями

...