Google App Engine - зависимость задачи - PullRequest
4 голосов
/ 12 февраля 2012

У меня в приложении длинная задача, поэтому я разделил ее на n задач. После выполнения этих n задач необходимо выполнить еще одну задачу, которая зависит от результатов этих n задач. Как мне добиться этой зависимости с помощью Task API? то есть выполнять одно задание за другим n заданий.

Ответы [ 3 ]

1 голос
/ 12 февраля 2012

Взгляните на GAE Pipeline API , он используется для построения сложного рабочего процесса, подобного описанному вами.

1 голос
/ 12 февраля 2012

Я думаю, что есть 2 способа, которые могут решить эту проблему. Предположим, задача TD зависит от n других задач TA, и существует очередь Q.

  1. Вставить n задач TA в очередь Q. Когда каждая задача TA завершается, она проверяет, является ли она последней в очереди Q. Если TA является последней задачей в очереди Q, она толкает TD в очередь. Q.

  2. Переместить n задач TA и TD в очередь Q. Когда TD запускается, он проверяет, завершены ли все задачи TA. Если есть какой-либо TA, незаконченный, TD отменяет его выполнение, возвращая любой код состояния HTTP вне диапазона 200-299.

Ключом этих методов является получение количества задач в очереди Q. Хотя я не пробовал, я знаю, что Python API предоставляет экспериментальный метод для получения ресурса TaskQueue определенной очереди. Свойство stats.totalTasks - это общее количество очередей в очереди.

Пожалуйста, смотрите http://code.google.com/intl/en/appengine/docs/python/taskqueue/rest.html

0 голосов
/ 14 февраля 2012

Еще один подход - начать с добавления всех задач в очередь. Получите информацию о начальных задачах N в хранилище данных по завершении, таким образом, чтобы вы могли запросить хранилище данных, чтобы узнать, все ли они запущены.
Когда зависимая задача выполняется, она выполняет этот запрос к хранилищу данных, чтобы проверить, выполнены ли ее условия (проверяет, все ли начальные задачи зарегистрировали, что они выполнены). Если нет, то его нужно запустить позже.
Для этого зависимая задача может добавить свою копию в очередь, запуск которой запланирован через определенный промежуток времени. С другой стороны (как в ответе выше), зависимая задача может завершиться с кодом состояния ошибки, и в этом случае она будет автоматически повторена в какой-то более поздний момент, пока не будет превышено значение retry_limit для очереди или задачи.

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