Задать вопрос

Как осуществить мониторинг выполнения процесса в реальном времени через ajax?

Добрый день. Суть такая: через ajax отправляю на сервер команду выполнить какое-то действие, скажем, генерация кучи картинок, как лучше реализовать мониторинг за прогрессом выполнения скрипта? Например, в реальном времени отобразить сколько еще в процентах выполняться скрипту и при необходимости остановить его выполнение? Фронт и бекэнд - на питоне джанговском.
  • Вопрос задан
  • 3243 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
@devel787
Возможно, чем-то поможет blog.miguelgrinberg.com/post/using-celery-with-flask
Ответ написан
Комментировать
Sheregeda
@Sheregeda
always be coding
Процесс запускай в celery, там можно таску отменить, если требуется. Интеграция с Django есть.
Сообщение можно организовать через centrifuge. На клиенте подписываемся на канал, на бекенде пишем в него. На Хабре есть статьи про centrifuge
Но это схема по хардкору и с некоторым оверхедом)
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
делайте fork процесса с апдейтом базы - читайте оттуда параметр для ajax-a.
при каждом апдейте - делайте проверку на команду: появилась - выполняем.
табличка БД для понимания:
ID,script_name,status,completed,command
Ответ написан
@lnked
допустим у вас есть 100 картинок, значит за 100% времени нам нужно обработать 100 изображений по 1му проценту на изображение

на js пишем функцию которая отсылает запрос на сервер и по возвращению ответа наращивает прогресс бар на 1 процент, и вызывает сама себя, как только доходим до 100 % прекращаем вызов самой себя и все готово

это что бы суть была понятна
Ответ написан
Serhioromano
@Serhioromano
Web Developer
Обычно делается так. Вы отправляете запрос на обработку картинок на сервер. Там оцениваете время работы примерно. Потом создаете файлик worker/process.json и туда ложите {done:0} что значит 0%.

Теперь в своем яваскрипте, сразу после запуска аякса, запускаете setInterval b через каждые 200ms читаете этот файл и его значение используете для прогресбара.

А когда аякс закончит работу, прерываете setInterval и назначаете прогрес бар на 100%.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы