Индикатор выполнения в Google App Engine - PullRequest
4 голосов
/ 11 февраля 2012

У меня есть приложение Google App Engine, которое выполняет около 30-50 вызовов удаленного API. Каждый вызов занимает около секунды, поэтому вся операция может легко занять минуту. В настоящее время я делаю это в цикле внутри функции post () моего сайта, поэтому ответ не печатается, пока не завершится вся операция. Излишне говорить, что в данный момент приложение не очень удобно для использования.

Я хотел бы напечатать ответ сразу после запуска операции, а затем обновить его после завершения каждого отдельного вызова API. Как бы я этого достиг? В настольном приложении я просто запускаю рабочий поток, который периодически обновляет интерфейс. Есть ли похожий механизм в Google App Engine?

Я гуглил «индикатор выполнения» и «движок приложения Google», но большинство результатов получены от людей, которые хотят следить за ходом загрузки файла. Моя ситуация иная: на сервере выполняется трудоемкая задача, поэтому клиент не может ничего сделать, чтобы следить за ее ходом. Этот парень - самая близкая вещь, которую я мог найти, но он работает на Java.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2012
  1. Отправьте логику публикации в задачу, используя http://code.google.com/appengine/docs/python/taskqueue
  2. Изменить логику процесса для установки статуса (это может быть использование memcache)
  3. Использование статуса memcache AJAX-запроса каждые 10 секунд, более или менее, решать только вам
3 голосов
/ 11 февраля 2012

Вы можете сразу же вернуться со своего поста и сделать одно из двух:

  • Опрос вашего клиента каждую секунду или около того, чтобы запросить у вашего сервиса его статус
  • Используйте API канала для отправки обновлений статуса вашему клиенту
0 голосов
/ 13 февраля 2012

Краткая версия: используйте очередь задач, которая записывает в ключ memcache по мере выполнения операции.Затем ваша страница может использовать API канала или повторно запрашивать отчет о ходе выполнения на сервере.

Длинная версия. В своем сообщении вы делегируете большую работу задаче.Задача будет периодически обновлять ключ, который находится в memcache.Если у вас нет времени на изучение API канала, вы можете сделать так, чтобы страница, возвращаемая вашим сообщением, периодически получала какой-то URL-адрес в приложении, который возвращает отчет о ходе работы на основе данных memcache, и затем вы можете обновить индикатор выполнения.Когда работа завершена, ваш сценарий может перейти на страницу результатов.

Если у вас есть время, изучение API канала того стоит.В этом случае задача получит токен канала, чтобы она могла обмениваться данными с клиентом канала JavaScript на вашей странице без необходимости опроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...