Как уменьшить счетчик задач, если не удалось выполнить все попытки? - PullRequest
0 голосов
/ 09 августа 2011

I использует счетчик для сохранения количества запущенных в данный момент задач. Как только задача успешно завершена, я уменьшаю это:

        for argument in files_arguments:
                taskqueue.add(url='/tasks/upload', params={'photo_key': str(photo_file.key()),
                                                           'counter_key': counter_key})
                # count number of active tasks                
                db.run_in_transaction(increase_counter, counter_key)

# task handler
class UploadWorker(webapp.RequestHandler):
    def post(self):
            try:
                result = urlfetch.fetch(...)              
            except DownloadError:
                logging.error('(TASK) ... DownloadError during file upload')
                pass
            except DeadlineExceededError:
                logging.error('(TASK) ... DeadlineExceededError during file upload')
                pass
            if result.status_code == 200:
                # decrease counter of active tasks
                db.run_in_transaction(decrease_counter, counter_key)
            else:
                self.response.set_status(500)

Но как узнать, что при последней попытке также не удалось уменьшить счетчик задач?

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

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

Как я уже говорил в вашем первоначальном вопросе,тем не менее, вы почти наверняка должны использовать что-то вроде Pipeline API - хранение единого глобального счетчика хранилища данных для задач серьезно ограничит вашу пропускную способность.

0 голосов
/ 09 августа 2011

Если эта транзакция не удалась, она выдаст другое исключение.

В результате ответ этого обработчика задач будет иметь 500 кодов состояния, и GAE попытается повторить его несколько раз.

Кстати, обратите внимание, что, поскольку обработчик может вызываться многократно, ваш urlfetch.fetch() может быть выполнен несколько раз. Это работает для вас?

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