Вы можете использовать «log-файл» для отслеживания заархивированных файлов и того, сколько файлов еще осталось.
Процедурный путь должен быть таким:
- Подсчитать номера файлов, записать их в текстовый файл в формате, подобном totalfiles.filespreocessed
- Каждый файл zip, просто обновите файл
Итак, если вам нужно сжать 3 файла, файл журнала будет увеличен как:
3.0 -> begin, no file still processed
3.1 -> 1 file on 3 processed, 33% task complete
3.2 -> 2 file on 3 processed, 66% task complete
3.3 -> 3 file on 3 processed, 100% task complete
А затем с помощью простой функции AJAX (интервал) проверять файл журнала каждую секунду.
В Python открытие, чтение и сбор файла такого маленького размера должны быть очень быстрыми, но, возможно, может вызвать проблемы с некоторыми запросами, если у вас будет много пользователей, делающих это одновременно, но, очевидно, вам нужно будет файл журнала для каждого запроса, возможно с именем rand, и удалите его после завершения задачи.
Проблема может заключаться в том, что для того, чтобы ajax мог прочитать файл журнала, вам нужно будет открывать и закрывать обработчик файла в python при каждом его обновлении.
В конечном счете, для более точного индикатора хода выполнения вы даже используете размер файла вместо номера файла в качестве параметра.