Получение задания по имени из taskqueue

Как я могу получить задание по имени?

from google.appengine.api import taskqueue
taskqueue.add(name='foobar', url='/some-handler', params={'foo': 'bar'}

task_queue = taskqueue.Queue('default')
task_queue.delete_tasks_by_name('foobar') # would work

# looking for a method like this:
foobar_task = task_queue.get_task_by_name('foobar')

Это должно быть возможно с помощью API REST ( https://developers.google.com/appengine/docs/python/taskqueue/rest/tasks/get). Но я бы предпочел что-то вроде task_queue.get_task_by_name('foobar'), Есть идеи? Я что-то пропустил?

1 ответ

Решение

Нет гарантии, что задача с таким именем существует - возможно, она уже выполнена. И даже если вам удастся get задача может быть выполнена, пока вы пытаетесь что-то с ней сделать. Поэтому, когда вы пытаетесь вернуть его обратно, вы не представляете, добавляете ли вы его в первый раз или во второй раз.

Из-за этой неопределенности я не вижу ни одного варианта использования, когда получение задачи по имени может быть полезным.

РЕДАКТИРОВАТЬ:

Вы можете дать имя своей задаче, чтобы конкретная задача выполнялась только один раз. Когда вы добавляете задачу с именем в очередь, App Engine проверит, существует ли задача с таким именем. Если это произойдет, следующая попытка не удастся.

Например, у вас может быть много запущенных экземпляров, и каждому экземпляру может потребоваться вставить объект в хранилище данных. Первый вариант - проверить, существует ли сущность в хранилище данных. Это относительно медленная операция, и к тому времени, когда вы получили свой ответ (сущность не существует) и решили вставить его, другой экземпляр мог уже вставить его. Таким образом, вы получите две сущности вместо одной.

Ваш второй вариант - использовать задачи. Вместо вставки новой сущности непосредственно в хранилище данных, экземпляр создает задачу для ее вставки и дает этой задаче имя. Если другой экземпляр попытается добавить задачу с тем же именем, он просто переопределит существующую задачу. В результате вам гарантируется, что объект будет вставлен только один раз.

Другие вопросы по тегам