2012-02-12 9 views
4

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

+0

Задайте вопрос, который похож на ваш. http://stackoverflow.com/questions/4224564/calling-a-script-after-tasks-queue-is-empty – jftsai

ответ

1

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

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

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

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

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

1

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

0

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

Смежные вопросы