Для того, чтобы один юзер не положил работу всего сервера, схема должна выглядеть примерно так:
1) Юзер передаёт файлы в форме
2) Джанга сохраняет файлы в файловой системе и создаёт задачу для Celery
3) Джанга отдаёт юзеру редирект на УРЛ. Например, такой: /tasks/17d9565387b046c1ba84bdbe55e0b0c8/, на которой стоит скрипт, который раз в секунду/2/10 кидает AJAX запросы на УРЛ статуса задачи: /tasks/17d9565387b046c1ba84bdbe55e0b0c8/status/ и либо заставляет юзера ждать дальше, либо показывает результат
-- Тем временем (параллельно) Celery добирается до той самой задачи и создаёт архив.
4) Юзеру показывается ссылка для скачивания архива.
По желанию можно не редиректить юзера/навесить права на просмотр задач только юзерам, их создавшим и так далее. Можно даже не использовать Celery, а обойтись одним subprocess и пайпами.