Мое приложение GAE должно загрузить несколько файлов на другой сервер (с использованием urlfetch).Как реализовать это с помощью заданий с предположением, что в конце завершения последнего задания я должен выполнить еще одно действие?
Как узнать, когда завершено последнее задание?
Upd .Правильный ли следующий подход с Задачами?
class Accumulator(db.Model):
counter = db.IntegerProperty()
def increase_counter(key):
obj = db.get(key)
obj.counter += 1
obj.put()
def zero_counter(key):
obj = db.get(key)
obj.counter = 0
obj.put()
def decrease_counter(key):
obj = db.get(key)
obj.counter -= 1
obj.put()
def get_counter(key):
obj = db.get(key)
return obj.counter
class PublishPhotosHandler(webapp.RequestHandler):
# where this tasks_counter should be defined? seems not here
db.run_in_transaction(zero_counter, some_unique_key)
for argument in files_arguments:
taskqueue.add(url='/upload', params={'key': key})
db.run_in_transaction(increase_counter, some_unique_key)
# here we redirect user to another page '/checkstatus'
...
# nothing is shown to the user here
class UploadWorker(webapp.RequestHandler):
def post(self):
key = self.request.get('key')
result = urlfetch.fetch(...)
db.run_in_transaction(decrease_counter, some_unique_key)
# how to return there error, so the task will be retried?
# nothing is shown to the user here
# this is our '/checkstatus' page
class CheckStatus(webapp.RequestHandler):
def get(self, key):
if get_counter(some_unique_key) == 0:
# all tasks finished
# show the content