Если я правильно понимаю, вы хотите, чтобы первый вызов запустил «обработку» и последующие вызовы для отображения хода выполнения.Плохая новость, это не будет так просто, по той очевидной причине, что вызов функции «обработка» из представления будет блокироваться до тех пор, пока не будет возвращена функция «обработка».
Решение здесь заключается в использовании асинхронного режима.очередь задач (Celery является каноническим решением - есть более легкие, но Celery облегчает масштабирование вашей инфраструктуры, добавляя новые «обрабатывающие» серверы по мере необходимости), с одним первым представлением, запускающим задачу обработки и возвращающим идентификатор задачи, и вторым представлением(который вы можете опрашивать с помощью ajax), проверяя ход выполнения задачи (или вы можете использовать django-channel, если вы хотите пофантазировать, но я рекомендую вам начать с того, что все сначала работает с простым опросом ajax).
Кроме того, получение «прогресса» из файла журнала, безусловно, не самое простое решение.Здесь мы делаем, чтобы задачи сельдерея хранили информацию о прогрессе в Redis (которую мы уже используем в качестве бэкэнда результата сельдерея), а представление «опрос» читало их обратно.Обратите внимание, что вы, конечно, можете написать свой собственный logging.handler
, чтобы сделать это (ну, по крайней мере, часть «сохранить в Redis»), если сообщения журнала - это то, что вы хотите, как «информация о прогрессе».